ich eine Dokumentenklasse namens „foo“ haben wie folgt definiert, in foo.js
:Kopieren Dokument mit Mongoose
var mongoose = require('mongoose');
var fooSchema = mongoose.Schema({
user_id: String,
created_at: { type: Date, default: Date.now },
flag: { type: Boolean, default: false },
etc: Number,
});
module.exports = mongoose.model('foo', fooSchema);
und in meinem Router, möchte ich ein Objekt instanziiert, und eine exakte Kopie davon (created_at
könnte ein wenig abweichen, kein Problem :)), nur das flag
Feld ändern. Also habe ich zwei Kopien, eine mit "flag", eine mit "not flag". Der Versuch, diese wie erwartet nicht funktioniert:
var Foo = require('../models/foo');
var myObj = new Foo();
myObj.user_id = req.user._id;
myObj.etc = 42;
myObj.save(function(err) {
if (err) throw err;
// // also create a "flag" copy
// non-working code:
var myObj2 = myObj;
myObj2.flag = true;
myObj2.save(function(err) {
if (err) throw err;
console.log("this does not create a new item");
}); // myObj2.save();
// working code:
var myObj2 = new Foo();
myObj2.user_id = myObj.user_id
myObj2.etc = myObj.etc;
myObj2.flag = true;
myObj2.save(function(err) {
if (err) throw err;
console.log("this works");
}); // myObj2.save();
}); // myObj.save();
Also, was ist falsch mit var myObj2 = myObj;
? Geht es als Referenz? Wenn ja, wie kann ich nach Wert übergehen? Muss ich einen speziellen Konstruktor definieren, der ein vorhandenes Element als Argument akzeptiert, sodass ich var myObj2 = new Foo(myObj);
aufrufen kann? Oder eine andere Möglichkeit, ein vorhandenes Objekt zu replizieren, ohne so viel Code zu duplizieren?
Danke,
Dank bekommen! Wenn ich 'myObj2._id' entferne, erstellt MongoDB einen gültigen Schlüssel für mich in' myObj2.save(); '? – jeff
Eigentlich nach 'myObj2 = toObject()' enthält nur die Methode 'save() 'nicht, da es ein einfaches js-Objekt ist. Aber wenn Sie 'Foo.create (myObj2)' aufgerufen haben, ist das zurückgegebene Objekt eine Instanz des Foo-Modells. Also, ja, löschen Sie die _id vor Foo.create und es erzeugt eine gültige _id für Sie. – YLS
Großartig! Und eine letzte Frage; existiert '.create()' nativ, oder muss ich es in 'foo.js' definieren? Danke, – jeff