Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/eldoy/mongowave
Javascript MongoDB database client
https://github.com/eldoy/mongowave
Last synced: 6 days ago
JSON representation
Javascript MongoDB database client
- Host: GitHub
- URL: https://github.com/eldoy/mongowave
- Owner: eldoy
- License: mit
- Created: 2019-11-05T19:14:52.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-07-24T20:47:15.000Z (4 months ago)
- Last Synced: 2024-07-24T23:27:50.227Z (4 months ago)
- Language: JavaScript
- Homepage:
- Size: 870 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mongowave MongoDB Client
Javascript MongoDB database client boasting the following features:
* Intuitive API
* Automatic timestamps (created_at, updated_at)
* Custom string id
* Using id instead of _id
* Insert, update and delete multiple by default
* Returns full object on create
* Updates with $set by default
* Retry connection on fail### Install
`npm i mongowave`### Usage
Connect to database:
```js
const connection = require('mongowave')
```Default options:
```js
const db = await connection({
// URL of database server
url: 'mongodb://localhost:27017',// Name of database
name: 'wdb',// Automatically set created_at and updated_at fields on change
timestamps: true,// Function used to generate ids
id: cuid,// Use 'id' instead of '_id'
simpleid: true,// The default size for batch queries
batchsize: 20,// Suppress logging
quiet: false,// Connection options for Mongodb Client
connection: {
useNewUrlParser: true,
useUnifiedTopology: true
},// Always convert id to string
stringid: true
})
```If you want to use underscore ids and ObjectIds (default MongoDB behavior):
```js
const db = await connection({
// Let MongoDB generate id
id: false,// Use '_id' instead of 'id'
simpleid: false
})
```Insert document:
```js
// Returns the full document:
// { id: '507f191e810c19729de860ea', name: 'hello' }
// Takes only 1 argument: values
const result = await db('project').create({ name: 'hello' })
```Insert multiple documents:
```js
// Returns the full documents:
// [
// { id: '507f191e810c19729de860ea', name: 'hello' },
// { id: '607f191e810c19729de860eb', name: 'bye' }
// ]
// Takes only 1 argument: values, must be array of objects
const result = await db('project').create([{ name: 'hello' }, { name: 'bye' }])
```Update document (updates multiple if query matches):
```js
// Returns the number of updated documents: { n: 1 }
// Takes 2 arguments: query, values
const result = await db('project').update({ id: '507f191e810c19729de860ea' }, { name: 'bye' })
```Delete document (deletes multiple if query matches):
```js
// Returns the number of deleted documents: { n: 1 }
// Takes 1 argument: query
const result = await db('project').delete({ id: '507f191e810c19729de860ea' })
```Find documents, all of [the mongodb query operators](https://docs.mongodb.com/manual/reference/operator/query/) work:
```js
// Returns an array of matching documents
// Takes 2 arguments: query, options// Find all
const result = await db('project').find()// Find all with name 'bye'
const result = await db('project').find({ name: 'bye' })// Find with sorting on 'name' field descending, use 1 for ascending
const result = await db('project').find({}, { sort: { name: -1 } })// Find only 2
const result = await db('project').find({}, { limit: 2 })// Find but skip 2
const result = await db('project').find({}, { skip: 2 })// Find all but don't include the 'name' field in the result
const result = await db('project').find({}, { fields: { name: false } })// Find all with 'level' field greater than 5
const result = await db('project').find({ level: { $gt: 5 }})
```Get document:
```js
// Returns the first matching document
// Takes 2 arguments: query, options
const result = await db('project').get({ name: 'bye' })
```Count documents:
```js
// Returns the count of the matching query
// Takes 2 arguments: query, options
const result = await db('project').count({ name: 'bye' })
```Null values:
```js
// Creates doc with null name field
const result = await db('project').create({ name: null })// Returns all docs with null name field
const result = await db('project').find({ name: null })// Sets all name fields to null
const result = await db('project').update({}, { name: null })
```Undefined values:
```js
// Creates doc without name field
const result = await db('project').create({ name: undefined })// Returns all docs without name field
const result = await db('project').find({ name: undefined })// Unsets all name fields
const result = await db('project').update({}, { name: undefined })
```Use the mongodb client base directly:
```js
db.base.collection('project').findOne({ _id: insert.id })
```The mongodb client:
```js
db.client
```MongoDB ObjectId short cut:
```js
// Generate a new ID
db.id()
```There's also `set`, `search`, `batch`, `each`, `aggregate`, `index`, `deindex`, `dups` and `analyze`. Read the source code to find out how to use them.
MIT Licensed. Enjoy!