blu*_*ren 3 javascript mongodb javascript-objects meteor meteor-autoform
我有一个看起来像这样的 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")
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的流星助手上编写了代码,这样在每次更新期间,只有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
Run Code Online (Sandbox Code Playgroud)
但是,当更新发生时,发生的事情是查询完全用我传递的内容替换了记录中的 misc 对象(包含 createdBy 和 creationTime)。我最终失去了 creationTime 和 createdBy 字段。
我该如何部分更新对象?
由于我的 doc 对象最初不包含 misc 对象,因此我也尝试注入以下内容:
doc.$set.misc.updatedBy
Run Code Online (Sandbox Code Playgroud)
但它错误地指出updatedBy 不存在。更新文档中的部分对象的正确方法是什么?
代替 doc.$set.misc.updatedBy
尝试这个:
doc = {
"$set": {
"misc.updatedBy": "some data"
}
};
Run Code Online (Sandbox Code Playgroud)
这里我们使用 MongoDBDot Notation来访问嵌入文档的属性。
例子:
var doc = {
"$set": {
"misc.updatedBy": "some data",
"misc.updatedTime": new Date(),
}
};
r.update(id, doc);
Run Code Online (Sandbox Code Playgroud)