2013-08-19 9 views

Antwort

7

Können Sie klarstellen, was Sie mit "kopieren/klonen" meinen? Versuchen Sie, ein doppeltes Dokument in der Datenbank zu erstellen? Oder versuchen Sie gerade, zwei var s in Ihrem Programm zu haben, die doppelte Daten haben?

Wenn Sie gerade tun:

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" 
      }); 
    }); 

In diesem Fall x und y wird in Ihrem Programm zwei „Kopien“ des gleichen Dokuments sein.

Alternativ, wenn Sie eine neue Kopie des Dokuments in die Datenbank einfügen wollte (wenn auch mit einem anderen _id Ich gehe davon aus), die wie folgt aussehen:

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

Oder wenn Sie tun dies von Anfang an, erstellt Sie aka einige Dokument d1, können Sie einfach save zweimal aufrufen, ohne Einstellung der _id:

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

Es wird zwei Dokumente jetztmit unterschiedlichen 10 's und alle anderen Felder in Ihrer Datenbank identisch.

Verdeutlicht dies die Dinge ein wenig?

+3

Ja, in der Tat, ich landete das 'doc' bekommen,' _id' Entfernen und Speichern :) – fusio

+0

Freut mich zu hören geklappt! – Amalia

+0

Wie hast du die _id entfernt? – JoeTidee

44

Der folgende Code Dokumente in Amelia Antwort über klonen nicht arbeiten:

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

Sie müssen auch d1.isNew = true; wie in zurückgesetzt:

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

danke für die doc.isNew :) – victorkurauchi

+0

rettete mein Leben (Art von :) :) – JoeTidee

+0

Noch ein Leben gerettet mit der doc.isNew. Vielen Dank! – jimmy

0

Der folgende Code Dokumente zu klonen:

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

Für einfach dieses Klons verwenden:

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); 
    }); 
Verwandte Themen