Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB更新嵌套数组中每个对象的属性_Mongodb - Fatal编程技术网

MongoDB更新嵌套数组中每个对象的属性

MongoDB更新嵌套数组中每个对象的属性,mongodb,Mongodb,我试图一次性增加给定球队中每个球员的caps属性 每个团队的结构如下: { name: "Real Madrid", players: [ { p_id: "Ronaldo", goal: 135, caps: 134, age: 28 }, { p_id: "Bale", goal: 75, caps: 45, age: 27 }, { p_id: "Marcelo", goal: 11, caps: 25, age: 31 },

我试图一次性增加给定球队中每个球员的
caps
属性

每个团队的结构如下:

{
  name: "Real Madrid",
  players: [ { p_id: "Ronaldo", goal: 135, caps: 134, age: 28 },
             { p_id: "Bale", goal: 75, caps: 45, age: 27 },
             { p_id: "Marcelo", goal: 11, caps: 25, age: 31 },
          { p_id: "Benzema", goal: 125, caps: 95, age: 22 } 
  ]
}
我只能找到关于如何一次更新一条嵌套记录的说明

db.teams.update({ name: "Real Madrid", "players.p_id" : Ronaldo },
{ $inc : { players.$.caps : 1 });
我可以一次更新所有记录吗?我能

我将在此处为其他人提供解决方案:

var bulk = db.teams.initializeOrderedBulkOp(),   
count = 0;

db.teams.find({ name: "Real Madrid" }).forEach( function(doc) {
var players = doc["players"];

    for( var i = 0; i < players.length; i++) {
        bulk.find(
            {
                "_id": doc._id,
                "players" : { $elemMatch : { "goal" : players[i]["goal"] }}
            }).update({ 
                $inc : { "players.$.goal" : 3 } 
            });
    }

    bulk.execute();
});
var bulk=db.teams.initializeOrderedBulkOp(),
计数=0;
db.teams.find({name:“皇家马德里”}).forEach(函数(doc){
var players=doc[“players”];
对于(变量i=0;i
您再次在
玩家
玩家
之间出现打字错误,再次编辑:)但是,这不是一个解决方案。上面的查询仍然一次只更新一行。我希望一次更新每个球员。你的意思是第一次运行时只更新
罗纳尔多
,然后第二次更新
贝尔
,等等?或者您的意思是一次只更新一个文档(名称为“皇家马德里”)但数组中的所有元素都已更新)。谢谢David,您共享的上一个链接解释说,它无法按我希望的方式完成。@Rich131您的答案在这里。请检查可能重复的第一个链接,它完全符合您的要求。您再次在
player
player
之间出现打字错误,再次编辑:)但是,这不是一个解决方案。上面的查询仍然一次只更新一行。我希望一次更新每个球员。你的意思是第一次运行时只更新
罗纳尔多
,然后第二次更新
贝尔
,等等?或者您的意思是一次只更新一个文档(名称为“皇家马德里”)但数组中的所有元素都已更新)。谢谢David,您共享的上一个链接解释说,它无法按我希望的方式完成。@Rich131您的答案在这里。请检查可能重复的第一个链接,它完全符合您的要求。