我有像
这样的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 :(得分: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);
}
});
答案 1 :(得分:0)
要更新数据库中的doc,您必须使用db.hashtag.update,而不是db.hashtag.find。查找仅从db中检索文档。
答案 2 :(得分:0)
我使用forEach更改了以前的循环方法,然后最后保存了doc,代码也运行了。
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);
}
}
});