Skip to content

jasancheg/x-mongo-db-live-changes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

x-db-oplog

XO code style

Version: 0.1.0.

Updated: Feb 11, 2018. 12:31 pm UTC-6

Status: completed

Listening to MongoDB live changes using oplog in a simple way.

Features

  • The package has a very small footprint and requires just a few dependencies including mongodb, debug and eventemitter3.
  • Built on top of the native NodeJS MongoDB driver.
  • Support start and stop tailing the MongoDB oplog at any time.
  • Support filtering oplog events by namespaces (database and collections).
  • First class Promise support which enable the use of async and await.
  • Uses eventemitter3 for high performance event emitting.
  • Strict and readable code enforced with xo
  • Unit tested with mocha and built with babel for backward compatibility with older versions of NodeJS like v6.x and v7.x.

Installation

$ npm install https://github.com/jasancheg/x-mongo-db-live-changes.git

Configure MongoDB with replica set

You need to configure your MongoDB instance (local instance) to have access to the oplog, here are some quick steps on how to do so:

  1. Shutdown your existing mongo instance if its running.

  2. Restart the instance. Use the --replSet option to specify the name of the replica set.

$ sudo mongod --replSet rs0
  1. Connect to the mongo instance by executing mongo in your terminal:
$ mongo
  1. In the mongo shell run rs.initiate() to initiate the new replica set:
> rs.initiate()

Once it is initiated then you are ready to start using x-db-oplog.

And here is the official MongoDB documentation if you need additional help on MongoDB replica set.

Usage

const MongoOplog = require('x-db-oplog');
const oplog = MongoOplog('mongodb://127.0.0.1:27017/local', { ns: 'test.news' });
const { log } = console;

oplog.tail();

oplog.on('op', data => log(data));
oplog.on('insert', doc => log(doc));
oplog.on('update', doc => log(doc));
oplog.on('delete', doc => log(doc.o._id));
oplog.on('error', error => log(error));
oplog.on('end', () => log('Stream ended'));
oplog.stop(() => log('server stopped'));

API

MongoOplog(uri, [options])

  • uri: Valid MongoDB uri or a MongoDB server instance.
  • options MongoDB connection options.

oplog.tail([fn])

Start tailing. This method support both Promise and callback.

const { log, error } = console

oplog.tail()
  .then(() => log('tailing started'))
  .catch(err => error(err))

// or with async/await
async function tail() {
  try {
    await oplog.tail()
    log('tailing started')
  } catch (err) {
    log(err)
  }
}

oplog.stop([fn])

Stop tailing and disconnect from server. This method support both Promise and callback.

const { log, error } = console

oplog.stop()
  .then(() => log('tailing stopped'))
  .catch(err => error(err))

// or with async/await
async function stop() {
  try {
    await oplog.stop()
    log('tailing stopped')
  } catch (err) {
    log(err)
  }
}

oplog.destroy([fn])

Destroy the x-db-oplog object by stop tailing and disconnecting from server. This method support both Promise and callback.

const { log, error } = console

oplog.destroy
  .then(() => log('destroyed'))
  .catch(err => error(err))

// or with async/await
async function destroy() {
  try {
    await oplog.destroy()
    log('destroyed')
  } catch (err) {
    error(err)
  }
}

oplog.ignore

Pause and resume oplog events.

oplog.ignore = true; // to pause
oplog.ignore = false // to resume

oplog.filter(ns)

Create and return a filter object.

const filter = oplog.filter('*.news')
filter.on('op', fn)
oplog.tail()

filter.destroy()

Destroy filter object.

filter.destroy()

filter.ignore

Pause and resume filter events.

filter.ignore = true; // to pause
filter.ignore = false // to resume

events

Events supported by oplog and filter;

  • op: All bellow operations (oplog/filter).
  • insert: Document insert (oplog/filter).
  • update: Document update (oplog/filter).
  • delete: Document delete (oplog/filter).
  • end: Cursor stream ended (oplog).
  • error: Error (oplog).

Run tests

Configure MongoDB for active oplog, once this is done then you can run the test:

$ npm install
$ npm run test

License

© 2018 MIT License. Made with ♥️ - 🇨🇷 - Inidea - Tonisan.

Releases

No releases published

Packages

No packages published