部分更新 mongo 对象
Partially updating a mongo object
我有一个 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")
}
}
我在我的流星助手上写了代码,这样在每次更新期间,只有 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 不存在。更新文档中的部分对象的正确方法是什么?
而不是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);
默认情况下 MongoDB 更新命令将 replace the document(s) entirely. To only update a specific field and don't touch the other fields of the matching documents use the set operator in the MongoDB update command。
我有一个 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")
}
}
我在我的流星助手上写了代码,这样在每次更新期间,只有 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 不存在。更新文档中的部分对象的正确方法是什么?
而不是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);
默认情况下 MongoDB 更新命令将 replace the document(s) entirely. To only update a specific field and don't touch the other fields of the matching documents use the set operator in the MongoDB update command。