sql >> Database >  >> NoSQL >> MongoDB

Hoe een Mongodb-database te klonen met Mongoose

Ik vond het moeilijk om dit te doen. Ik heb geen referentie.

Dit is echter hoe ik het aan mijn kant deed.

1, ik heb een andere collectie gemaakt binnen dezelfde

db: mydb
collections: books, oldbooks

2, aangezien ik maar met één database tegelijk verbinding kan maken, houd ik me hieraan:

mongoose.connect(process.env.CONN_STR);

3, Op uw bestaande collectie, in dit geval boeken, hebben we deze code:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var BookSchema = new Schema({
  name: String
})

module.exports = mongoose.model('Book', BookSchema);

4, ik heb een ander schema voor de back-up gemaakt, zodat ik de naam van de verzameling kan specificeren:

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var ObjectId = Schema.ObjectId;

    var BackupSchema = new Schema({
      name: String
    }, {
      collection: 'oldbooks'
    })

    module.exports = mongoose.model('BackupBook', BackupBookSchema);

LET OP:dat we de collectie hebben gespecificeerd in BackupBook Schema collection: 'oldbooks' . Het idee is om het bestaande schema te repliceren naar het back-upschema.

5, haal elk item in de verzameling op en sla het op:

 Book.find()
    .exec((err, books) => {
      if(err) throw err
      else {
        books.forEach( (book) => {
          var backup = new BackupBook();

          backup._id = book._id;
          backup.name = book.name;

          backup.save((err, backup) => {
          })
        })
      }
    })

TLDR:Maak een andere collectie als back-up. Vraag elk item van de verzameling op en sla het vervolgens afzonderlijk op in het back-upschema. Let op, het back-upschema moet de naam van de verzameling specificeren.




  1. mongodb en authenticeren en paspoort in node.js

  2. In mongodb-go-driver, hoe je BSON in een struct marshal / unmarshal

  3. Loggen met winston-mongodb en express-winston

  4. DAO en afhankelijkheidsinjectie, advies?