在mongoose中实例化模型时,我注意到了这个有趣的事情 - 实例可以通过除实例本身之外的其他方式进行更改。这是一个例子:
var articleSchema = new Schema({
name: 'String',
price: 'Number'
});
var Article = mongoose.model('Article', articleSchema);
var nexus = new Article({
name: 'Nexus 5',
price: 300
});
nexus.save(function(err, instance) {
instance.name = 'Nexus Five';
instance.save(function(err, instance2) {
instance2.name = 'Nexus 5ive';
instance2.save(function(err, instance3) {
console.log(nexus.name); //'Nexus 5ive'
});
});
});
正如您在示例中看到的,我从未更改name
的{{1}}属性,我更改了nexus
函数在回调中返回的模型的属性。以这种方式改变数据是否可以?或者我应该坚持第一个定义的实例(即save
变量)?这似乎有点令人困惑,因为你很容易失去对你正在处理的事情的控制。
答案 0 :(得分:1)
save函数返回一个模型。如果您愿意,可以继续修改它。
但是,当你回来的模型实例总是与你保存的模型实例完全相同时,我无法想象什么时候不继续改变原始模型是真的有用。出于同样的原因,你什么时候会改变原始文件,保存它,再次变异,然后再次保存?我没有想出任何可以在你的例子中编写代码的场景。
如果使用新选项调用findOneAndUpdate,则突然返回的模型实例变得有用,因为它是文档的新副本(可能已由另一个客户端进行了更改)。