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