0
我已經定義了一個名爲「foo」的文檔類如下複製文檔,在foo.js
:與貓鼬
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);
,並在我的路由器,我想實例化一個對象,並且,一個精確副本(created_at
可能會有所不同,沒有問題:)),只更改flag
字段。所以我有兩個副本,一個是「flag」,一個是「not flag」。嘗試這個沒有按預期工作:
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();
那麼var myObj2 = myObj;
有什麼問題?它通過參考傳遞嗎?如果是這樣,我怎麼能通過價值?我是否需要定義一個特殊的構造函數,將現有的項目作爲參數,以便我可以撥打var myObj2 = new Foo(myObj);
?或者我可以用任何其他方式複製現有項目而不復制這麼多代碼?
謝謝,
謝謝!如果我刪除'myObj2._id',MongoDB會在'myObj2.save();'中爲我創建一個有效的密鑰嗎? – jeff
事實上,在myObj2 = toObject()不包含save()方法後,因爲它是一個普通的js對象。但是當你調用'Foo.create(myObj2)'時,它返回的對象就是Foo模型的一個實例。所以,是的,在Foo.create之前刪除_id,它會爲你生成一個有效的_id。 – YLS
太棒了!還有一個最後的問題; '.create()'本身存在,還是我需要在'foo.js'中定義它?謝謝, – jeff