Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/deve-sh/mongoose-dual-writes
Library to bridge the gap between mongoose and the ability to perform dual-writes across clusters.
https://github.com/deve-sh/mongoose-dual-writes
dual-writes mongodb mongoose
Last synced: 5 days ago
JSON representation
Library to bridge the gap between mongoose and the ability to perform dual-writes across clusters.
- Host: GitHub
- URL: https://github.com/deve-sh/mongoose-dual-writes
- Owner: deve-sh
- License: mit
- Created: 2023-10-11T08:18:16.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-15T12:56:40.000Z (about 1 year ago)
- Last Synced: 2023-10-17T04:05:03.561Z (about 1 year ago)
- Topics: dual-writes, mongodb, mongoose
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/mongoose-dual-writes
- Size: 93.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
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](https://kiranrao.ca/2022/05/04/zero-downtime-migrations.html).
It's natively hard to do with [Mongoose](https://mongoosejs.com/) 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](https://www.mongodb.com/docs/cluster-to-cluster-sync/current/reference/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](https://www.mongodb.com/docs/atlas/app-services/triggers/database-triggers/), prefer using MongoDB triggers for your migration.
### Installation
```bash
npm i mongoose-dual-writes
```### Get Started
```javascript
const MongoDBDualWrites = require('mongoose-dual-writes');// Make sure your Mongoose default connection is already established.
await MongoDBDualWrites.initialize({
secondaryConnections: [
{
uri: 'mongodb:///',
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](https://img.shields.io/badge/mongoose%20dual%20writes-File%20an%20issue-orangered)](https://github.com/deve-sh/mongoose-dual-writes/issues/new)