我有一个蒙戈文件看起来像这样:我的流星帮手部分更新蒙戈对象
{
"_id" : "cfqjJW8WZprDSJEop",
"rName" : "z1",
"pName" : "P-4",
"ipAddress" : "21.1.1.12",
"misc" : {
"createdBy" : "admin",
"updatedBy" : "admin",
"creationTime" : ISODate("2016-09-15T09:43:10.953Z"),
"updatedTime" : ISODate("2016-09-15T09:43:10.953Z")
}
}
我已经写代码,这样每次更新过程中,只有updatedBy
和updatedTime
应该被推到mongo文件。
misc对象是在插入/更新之前添加的东西。
我遇到麻烦时,我尝试使用更新的记录:
doc // contains the update document being generated.
misc = {};
misc.updatedBy = //some name
misc.updatedTime = new Date();
doc.misc = misc,
r.update(id,doc); // calling meteor update
然而,当更新发生的,正在发生的事情是,查询被完全替换记录中的其它对象(即包含createdBy和creationTime)与我已经通过。我最终失去了creationTime和createdBy字段。
如何部分更新对象?
由于我的文档对象最初不包含其它对象,我也尝试过的东西注入,如:
doc.$set.misc.updatedBy
但出现了错误,指出updatedBy不存在。更新文档中的部分对象的正确方法是什么?
虽然我昨天又看了这个,我注意到$ set是设置整个对象。我所做的是首先获取记录的对象数据,然后引入那些未设置的对象属性,手动将它们添加到$ set,然后更新文档。额外5行代码,但完成这项工作! – blueren
@blueren是的,但额外的数据库查找操作可能会非常昂贵,具体取决于情况。 –
从我读到的,流星中的additioanal查找操作发生在已存在于客户端的minimongo实例中。所以它不应该是太多的性能影响。 – blueren