¿Cómo podemos clonar un documento en la misma colección o en una nueva con un nuevo _id?
aquí están los datos encontrados de la consulta proveniente de "doc" (res.query)
[ { _id: new ObjectId("614d4766fb2600340fdb2904"), templateName: 'first template', _ref: '1632454502ref', owner: 'wxTWH8zqSwaIXPAVsjZoRCkvjx73', __v: 0 } ]no funciona:
TemplateInfo.find(req.query).exec(function (err, doc) { console.log("document", doc); var newdoc = new TemplateInfo(doc[0]); delete newdoc._id; //= mongoose.Types.ObjectId(); newdoc.save(); });Esto funciona, pero los datos ahora son un objeto que no está insertado correctamente.
TemplateInfo.find(req.query).exec(function (err, doc) { console.log("document", doc); var newdoc = new TemplateInfo(doc); newdoc._id = mongoose.Types.ObjectId(); newdoc.save(); });resultados pero mal:
{ "0": { "_id": { "$oid": "614d4766fb2600340fdb2904" }, "templateName": "first template", "_ref": "1632454502ref", "owner": "wxTWH8zqSwaIXPAVsjZoRCkvjx73", "__v": 0 }, "_id": { "$oid": "614e34dbf288909e4713282b" }, "__v": 0 }Funciona correctamente, sin embargo, necesito obtener mis datos de la consulta que no se ingresó manualmente
const docData = { //_id: new ObjectId("614d4766fb2600340fdb2904"), templateName: "first template", _ref: "1632454502ref", owner: "wxTWH8zqSwaIXPAVsjZoRCkvjx73", __v: 0, }; TemplateInfo.find(req.query).exec(function (err, doc) { console.log("document", doc); var newdoc = new TemplateInfo(docData); newdoc._id = mongoose.Types.ObjectId(); newdoc.save(); });los resultados son correctos pero los ingresé manualmente como una variable:
{ "_id": { "$oid": "614e378700b5bd9c7ba5ef37" }, "templateName": "first template", "_ref": "1632454502ref", "owner": "wxTWH8zqSwaIXPAVsjZoRCkvjx73", "__v": 0 }Espero tener una copia de un documento con diferente _id en la colección mongoDB
{ _id: new ObjectId("614d4766fb2600340fdb2904"), templateName: 'first template', _ref: '1632454502ref', owner: 'wxTWH8zqSwaIXPAVsjZoRCkvjx73', __v: 0 }El siguiente es el ejemplo para copiar/clonar documento en mongoose.
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/test'); const Cat = mongoose.model('Cat', { name: String }); Cat.find({_id:'614e440b771169c71a34dae9'}).exec(function (err, doc) { console.log("document", doc); doc.forEach(node => insertBatch(node)); }); function insertBatch( doc) { var id; id = mongoose.Types.ObjectId(); doc._id = id; console.log("doc", doc); const kitty = mongoose.model('Cat'); kitty.findOneAndUpdate({_id: id}, doc, {upsert: true}, function(err, doc1) { if (err) return res.send(500, {error: err}); console.log('Succesfully saved.'); }); }"614e440b771169c71a34dae9" puede ser cualquier identificación en la colección