2015-07-21 57 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

这很有帮助。 –

相关问题