2015-07-21 84 views
2
/* 0 */ 
{ 
    "_id" : ObjectId("55addc2f8dab32aca87ce0bd"), 
    "partNum" : "part1", 
    "dest" : "First Part", 
    "sales" : [ 
     "sale1", 
     "sale2", 
     "sale3" 
    ], 
    "salesData" : { 
     "sale1" : { 
      "mcode" : "mc11", 
      "dtype" : [ 
       "AAA", 
       "BBB" 
      ] 
     } 
    } 
} 

/* 1 */ 
{ 
    "_id" : ObjectId("55addc408dab32aca87ce0be"), 
    "partNum" : "part2", 
    "dest" : "Second Part", 
    "sales" : [ 
     "sale1", 
     "sale2", 
     "sale3" 
    ], 
    "salesData" : { 
     "sale1" : { 
      "mcode" : "mc22", 
      "dtype" : [ 
       "AAA", 
       "BBB" 
      ] 
     } 
    } 
} 

我在編寫mongo腳本時效率不高。我的要求是在集合中所有文檔中的「mcode」爲「mc11」的地方添加一個「dtype」數組的值。以上是我收集的兩份文件輸出。我正在使用下面的腳本來做到這一點,它不工作。任何人都可以請幫我在mongo集合中添加一個值到數組的腳本

db.testingRD.find().forEach(function(myDocument) 
{ 
    db.testingRD.update({id: myDocument._id}, {$push : {"salesData.sale1.dtype" : "DDD"}}); 
}); 

回答

2

要追加一個更大的價值"dtype"陣列無論"mcode""mc11",使用以下update其中query對象是用於更新的選擇標準,併爲相同的查詢選擇器如find()方法,所述update對象具有$push修改應用,然後將options文件這是可選的。如果設置爲true,則更新符合查詢條件的多個文檔:

var query = { "salesData.sale1.mcode": "mc11" }, 
    update = { 
     "$push": { "salesData.sale1.dtype": "DDD" } 
    }, 
    options = { "multi": true }; 

db.testingRD.update(query, update, options); 
+1

嗨Chridam,對不起,我昨天無法回覆。你的解決方案對我很有幫助。謝謝 –

1

您在腳本中有一個打字錯誤(你忘了下劃線):

db.testingRD.find().forEach(function(myDocument) 
{ 
    db.testingRD.update({_id: myDocument._id}, {$push : {"salesData.sale1.dtype" : "DDD"}}); 
}); 

我總是用一招時的更新接縫不工作:我改變用printjson更新+發現,這樣我可以看到,如果它是匹配任何東西:

db.testingRD.find().forEach(function(myDocument) { printjson(db.testingRD.find({_id: myDocument._id})) }); 
+1

這很有幫助。 –

相關問題