Skip to content

eldoy/mongowave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

const connection = require('mongowave')

Default options:

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):

const db = await connection({
  // Let MongoDB generate id
  id: false,

  // Use '_id' instead of 'id'
  simpleid: false
})

Insert document:

// Returns the full document:
// { id: '507f191e810c19729de860ea', name: 'hello' }
// Takes only 1 argument: values
const result = await db('project').create({ name: 'hello' })

Insert multiple documents:

// 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):

// 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):

// 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 work:

// 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:

// Returns the first matching document
// Takes 2 arguments: query, options
const result = await db('project').get({ name: 'bye' })

Count documents:

// Returns the count of the matching query
// Takes 2 arguments: query, options
const result = await db('project').count({ name: 'bye' })

Null values:

// 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:

// 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:

db.base.collection('project').findOne({ _id: insert.id })

The mongodb client:

db.client

MongoDB ObjectId short cut:

// 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!

About

Javascript MongoDB database client

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •