集合

2014-05-18 20 views
-1

的阵列字段内的MongoDB更新子文档我有一个集合的mongodb像集合

{ 
"_id" : ObjectId("5375ef2153bb790b20d8a660"), 
"association" : [ 
    { 
     "count" : 3, 
     "name" : "hayatdediğin" 
    }, 
    { 
     "count" : 2, 
     "name" : "sadecesenolsan" 
    }, 
    { 
     "count" : 2, 
     "name" : "üslupnamustur" 
    } 
], 
"tag_count" : 4, 
"tag_name" : "vazgeçilmezolan", 
"variation" : [ 
    { 
     "count" : 4, 
     "name" : "VazgeçilmezOlan" 
    } 
] 
} 

每个集合包括TAG_NAME,TAG_COUNT,阵列场关联和阵列场变化的。对于关联中的每个名称,存在与此文档相同的不同文档。我需要通过查询数据库在每个关联字典中添加新字段“total_count”,其值等于名称的tag_count。

我想这个代码,但它不工作

db.hashtag.find().forEach(function (doc) { 
    if (doc.association.length != 0) { 
     doc.association.forEach(function (assoc) { 
      db.hashtag.find({'tag_name': assoc.name}).forEach(function(tag){ 
       assoc.total_count=tag.tag_count; 
     }) 

     }); 
    } 
}); 
+0

你能解释给予了反对票请.... –

回答

0

要更新数据库,你必须使用db.hashtag.update,不db.hashtag.find文档。仅查找从数据库中检索文档。

1

修改每个doc之后,您需要在集合上调用save来提交更改。

假设你在shell这样做:

db.hashtag.find().forEach(function (doc) { 
    if (doc.association.length != 0) { 
     doc.association.forEach(function (assoc) { 
      db.hashtag.find({'tag_name': assoc.name}).forEach(function(tag){ 
       assoc.total_count=tag.tag_count; 
      }); 
     }); 
     // Save the changed doc back to the collection 
     db.hashtag.save(doc); 
    } 
}); 
+0

我试着用同样的方法保存的文档,但没有工作的原因..无论如何,我找到了答案,但感谢您的帮助 –

0

我改变及如何使用foreach循环前面的方法,然后在最后一次保存的文档和代码工作。

db.hashtag.find().forEach(function (doc) { 

    var array = doc.association; 
    if (array != undefined){ 
     for(var i=0;i<array.length;i++) 
     { 
      var obj = db.hashtag.findOne({'name':array[i].name}); 
      var count = obj.count; 

      doc.association[i].total_count = count; 

      db.hashtag.save(doc); 
     } 
    } 
});