una importar guardar exportar datos colecciones coleccion mongodb mongoose instance document

mongodb - importar - ¿La forma más fácil de copiar/clonar una instancia de documento de mangosta?



guardar base de datos mongodb (4)

Mi enfoque sería obtener la instancia del documento y crear una nueva desde los campos de la instancia. Estoy seguro de que hay una mejor manera de hacerlo.


¿Puedes aclarar a qué te refieres con "copiar / clonar"? ¿Vas a intentar crear un documento duplicado en la base de datos? ¿O solo intentas tener dos var en tu programa que tienen datos duplicados?

Si acabas de hacer:

Model.findById(yourid).exec( function(err, doc) { var x = doc; Model.findById(yourid).exec( function(err, doc2) { var y = doc2; // right now, x.name and y.name are the same x.name = "name_x"; y.name = "name_y"; console.log(x.name); // prints "name_x" console.log(y.name); // prints "name_y" }); });

En este caso, y serán dos "copias" del mismo documento dentro de su programa.

Alternativamente, si quisiera insertar una nueva copia del documento en la base de datos (aunque _id que con un _id diferente), se vería así:

Model.findById(yourid).exec( function(err, doc) { var d1 = doc; d1._id = /* set a new _id here */; d1.save(callback); } );

O si está haciendo esto desde el principio, alias que creó algún documento d1 , puede simplemente save dos veces sin configurar el _id :

var d1 = new Model({ name: "John Doe", age: 54 }); d1.save(callback); d1.save(callback);

Ahora habrá dos documentos con diferentes _id ''sy todos los demás campos idénticos en su base de datos.

¿Esto aclara un poco las cosas?


El siguiente código para clonar documentos:

Model.findById(yourid).exec( function(err, doc) { var newdoc = new Model(doc); newdoc ._id = mongoose.Types.ObjectId(); newdoc .save(callback); } );


El siguiente código para clonar documentos en la respuesta anterior de Amelia no funciona :

Model.findById(yourid).exec( function(err, doc) { var d1 = doc; d1._id = /* set a new _id here */; d1.save(callback); } );

También debe restablecer d1.isNew = true; como en:

Model.findById(yourid).exec( function(err, doc) { doc._id = mongoose.Types.ObjectId(); doc.isNew = true; //<--------------------IMPORTANT doc.save(callback); } );


Para clonar simplemente usa esto:

Context.findOne({ _id: context._id }) .then(function(c) { c._id = undefined; c.name = context.name; c.address = context.address; c.created = Date.now(); return Context.create(c.toObject()); }).then(function(c) { return res.json({ success: true, context: context }); }).catch(function(err) { next(err, req, res); });