mongoose-dual-writes
v1.0.0
Published
Utils to help you achieve dual-writes with Mongoose
Downloads
5
Maintainers
Readme
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