1.0.0 • Published 7 months ago

mongoose-dual-writes v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

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

1.0.0

7 months ago

0.0.1

7 months ago