Meine Vorgehensweise wäre, die Dokumenteninstanz zu erhalten und aus den Instanzfeldern eine neue zu erstellen. Ich bin mir sicher, dass es einen besseren Weg gibt, es zu tun.Einfachste Möglichkeit zum Kopieren/Klonen einer Mungo-Dokumenteninstanz?
Antwort
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?
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);
}
);
danke für die doc.isNew :) – victorkurauchi
rettete mein Leben (Art von :) :) – JoeTidee
Noch ein Leben gerettet mit der doc.isNew. Vielen Dank! – jimmy
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);
}
);
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);
});
Ja, in der Tat, ich landete das 'doc' bekommen,' _id' Entfernen und Speichern :) – fusio
Freut mich zu hören geklappt! – Amalia
Wie hast du die _id entfernt? – JoeTidee