Mongodb 是否可以更新嵌入文档中嵌入文档的属性(每个属性都位于数组中)?
考虑到本文件:Mongodb 是否可以更新嵌入文档中嵌入文档的属性(每个属性都位于数组中)?,mongodb,Mongodb,考虑到本文件: { "_id" : ObjectId("54d0a5cdc9311cad167f55d5"), "Title" : "Add Solaris Zone", "Type" : "System", "Tasks" : [ { "TaskName" : "Ask for an IP", "TaskDescription" : "Ask to netwo
{
"_id" : ObjectId("54d0a5cdc9311cad167f55d5"),
"Title" : "Add Solaris Zone",
"Type" : "System",
"Tasks" : [
{
"TaskName" : "Ask for an IP",
"TaskDescription" : "Ask to network team for an ip adress",
"Custom" : [
{
"id" : ObjectId("54d0a5cdc9311cad167f55d3"),
"name" : "ip",
"value" : ""
},
{
"id" : ObjectId("54d0a5cdc9311cad167f55d4"),
"name" : "vlan",
"value" : ""
}
],
"Prerequisites" : [ ]
}
}
是否可以为task where taksname=“Ask for a ip”更新属性“value”,比如字段ip
我可以更新更高级别的属性(如TaskName),但如果嵌入文档包含嵌入文档的数组,该怎么办?通常要更新嵌套数组中的字段,可以使用$operator。 但是,由于只能使用一次,因此无法更新嵌套在neasted数组中的数组元素 但是,您可以做的是(假设您知道“task”元素的位置)指定如下位置:
update({...}, { $set: {"Tasks.0.Custom.$.value": "MyVal"}})
您好,谢谢您的回答,我不知道任务元素的位置,所以我应该怎么做:1)在我的应用程序中加载整个任务元素,编辑它并将其写回mongo,2)进行第一次查询以获得任务的位置(如果可能的话)3)更改我数据库的设计(但我不认为这是坏的)第二个选项不太好,因为有人可以在读取和更新之间编辑元素,所以您可能会更新错误的元素。我会选择第一个或第三个,两者都很好。若将任务放在主元素之外是有意义的,那个么第三个选项似乎不错。如果你在应用程序中加载整个聚合并使用它-第一个是我认为从主文档中获取任务是没有意义的,所以我将阅读整个文档,在我的应用程序中更新并写回它。谢谢