Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bubenshchykov/mongocopy
copies a specified set of data from one mongo database to another
https://github.com/bubenshchykov/mongocopy
migration mongo mongodb
Last synced: 20 days ago
JSON representation
copies a specified set of data from one mongo database to another
- Host: GitHub
- URL: https://github.com/bubenshchykov/mongocopy
- Owner: bubenshchykov
- Created: 2014-07-08T01:03:11.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-01-22T12:27:47.000Z (almost 5 years ago)
- Last Synced: 2024-10-11T13:45:53.827Z (about 1 month ago)
- Topics: migration, mongo, mongodb
- Language: JavaScript
- Size: 198 KB
- Stars: 8
- Watchers: 2
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
mongocopy [![Build Status](https://travis-ci.org/bubenshchykov/mongocopy.png?branch=master)](https://travis-ci.org/bubenshchykov/mongocopy)
=========[![NPM](https://nodei.co/npm/mongocopy.png?global=true)](https://nodei.co/npm/mongocopy/)
Sometimes we need to copy a special set of user data from one environment to another.
The module fits nicely when you want to
* select a set of collections
* add match criteria to the documents inside
* specify transform function for documents
* and get it on other dbexample
====Assume you have production and staging database.
In production db you have
```javascript
{
products: [
{userId: 1, _id: 1, name: 'apple'},
{userId: 1, _id: 2, name: 'orange'}
],
customers: [
{userId: 1, _id: 1, name: 'bob'},
{userId: 1, _id: 2, name: 'rob'},
{userId: 2, _id: 3, name: 'li'}
],
countries: [
{_id: 1, code: 'UA'},
{_id: 2, code: 'ES'},
{_id: 3, code: 'DK'}
],
files: [..],
other: [..]
}
```You want to copy only a few collections for the user 1, transform the documents inside because of env differences, and also you want some dictionary eg countries
```javascript
var mongocopy = require('mongocopy');var opts = {
uriFrom: 'mongodb://localhost:27017/production',
uriTo: 'mongodb://localhost:27017/staging',
data: {
products: {
query: {userId: 1},
transform: function(doc, cb) {
doc.name += ' xxl';
return cb(null, doc);
}
},
customers: {
query: {userId: 1},
transform: function(doc, cb) {
doc.name = 'mr ' + doc.name;
return cb(null, doc);
}
},
countries: {}
},
dryRun: true, // fake run without inserts, reports docs which are found by given queries
log: true, // streaming logs, false by default
ignoreDuplicates: true // continue if duplicate error occured, false by default
}
};mongocopy(opts, function(err, report) {
console.log(arguments);
});```
That's it!