Skip to content

Latest commit

 

History

History
186 lines (145 loc) · 4.41 KB

README.md

File metadata and controls

186 lines (145 loc) · 4.41 KB

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!