2017-05-08 108 views
0

我是Mongodb的新手,并通过Mongodb文档进行自学习。我有以下情形挣扎,请建议我如何在MongoDB中实现这一点:MongoDB中的嵌套更新

{ 
    "_id" : ObjectId("5a2d123456"), 
    "Name" : "MongoDB", 
    "BookCode" : "ID321", 
    "Issue" : [ 
     { 
      "Name" : "ABC", 
      "Date" : '2016-12-15' 
     }, 
     { 
      "Name" : "DEF", 
      "Date" : '2017-10-01' 
     } 
    ] 
} 

我的方案是: - 如果没有特别名称&的bookcode文档,然后检查是否有任何Issue.Name存在或不存在相同的名称,如果存在则更新或在问题下插入新数组。

if exists (Name: 'abc' and BookCode: 'book1') 
    then if exists (Issue.Name: 'DEF') 
     then 
      Update Issue.Date 
     else 
      Insert 
+2

让我们知道你已经尝试过 – sidgate

+0

你正在尝试这在mongo shell或通过一些代码? –

+0

尝试mongo shell –

回答

0

我想是这样的:

db.Books.find({Name:"MongoDB", BookCode:"ID321"}).forEach(function (thisIssue) 
{ 
    thisIssue.Issue.forEach(function (item) 
    { 
     if(item.Name === 'ABC') 
     { 
      item.Date = "201705011315.0" 
     } 
      db.Books.save(thisIssue); 
     } 
    }); 
}); 

工作到一定程度上。 这可以使用UPSERT? 我尝试了upsert(名称上的唯一索引,BookCode & Item.Name),但它在Items下插入新的子文档。