我有一个mongo文档,如下所示:
{
"_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")
}
}
我已在我的meteor助手上编写代码,以便在每次更新时,只应将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
然而,当更新发生时,发生的事情是查询完全用我传递的内容替换记录中的misc对象(包含createdBy和creationTime)。我最终失去了creationTime和createdBy字段。
如何部分更新对象?
由于我的doc对象最初不包含misc对象,我还尝试过注入类似的东西:
doc.$set.misc.updatedBy
但它错误地说明updatedBy不存在。更新文档中的部分对象的正确方法是什么?
答案 0 :(得分:2)
而不是doc.$set.misc.updatedBy
试试这个:
doc = {
"$set": {
"misc.updatedBy": "some data"
}
};
这里我们使用MongoDB Dot Notation
来访问嵌入文档的属性。
示例:
var doc = {
"$set": {
"misc.updatedBy": "some data",
"misc.updatedTime": new Date(),
}
};
r.update(id, doc);
答案 1 :(得分:0)
默认情况下,MongoDB更新命令将replace the document(s) entirely。要仅更新特定字段,请勿触摸匹配文档use the set operator in the MongoDB update command的其他字段。