Skip to content

Library to bridge the gap between mongoose and the ability to perform dual-writes across clusters.

License

Notifications You must be signed in to change notification settings

deve-sh/mongoose-dual-writes

Repository files navigation

Mongoose Dual Writes

Dual/Replicated Writes are a very important feature that need to work when working on database migrations that need 0 downtime.

It's natively hard to do with Mongoose and difficult to get right.

Mongoose scopes its Models to a single default connection, you have to explicitly create models everytime you use a second connection. And since most codebases that utilize Mongoose have very tight coupling between them and Mongoose's models, it's not feasible to add a duplicated statement each time you write to the database via Mongoose.

You could use MongoSync but if you're using shared Atlas Clusters, you're out of luck.

This library bridges those gaps and adds a zero-change MongoDB write replication for codebases reliant on Mongoose! 🌟

Note and Warning: The library uses mongoose.set('debug') so if you have any debug statements turned on, this would overwrite them. Please be mindful of that. If you need debug statements, prefer using MongoDB triggers for your migration.

Installation

npm i mongoose-dual-writes

Get Started

const MongoDBDualWrites = require('mongoose-dual-writes');

// Make sure your Mongoose default connection is already established.

await MongoDBDualWrites.initialize({
    secondaryConnections: [
        {
            uri: 'mongodb://<secondary-cluster-or-database-url>/<dbName>',
            options: {
                ...allConnectionOptionsSupportedByMongoose,
                enabled: true | false   // Optional, can be used to switch off dual-writes via a
            }
        },
        ... // as many connections you want to replicate writes to
    ]
});

That's it! The writes falling under the following operations would get transferred automatically:

  • updateOne
  • updateMany
  • insertOne
  • insertMany
  • replaceOne
  • replaceMany
  • deleteOne
  • deleteMany
  • findOneAndUpdate
  • findOneAndInsert
  • findOneAndDelete
  • findOneAndRemove
  • findOneAndReplace
  • save

Issues and Feature Requests

File An issue

About

Library to bridge the gap between mongoose and the ability to perform dual-writes across clusters.

Topics

Resources

License

Stars

Watchers

Forks