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,我有这样一份文件: { _id: ".....", messages: [ { .... votes: 2 }, { .... votes: 2 } ] } 我想在同一请求中增加数组中的所有投票字段 怎么做?$运算符仅选择第一个元素 谢谢大家! 您可能需要对一些JS循环执行此操作: db.collection.find(

我有这样一份文件:

{
     _id: ".....",
     messages: [
        {
          ....
          votes: 2
        },
        {
          ....
          votes: 2
        }
     ]
}
我想在同一请求中增加数组中的所有投票字段

怎么做?$运算符仅选择第一个元素


谢谢大家!

您可能需要对一些JS循环执行此操作:

db.collection.find( { "_id": SOME_ID } ).forEach( function( doc ) {
  for ( i in doc.messages ){
    doc.messages[ i ].votes += 1;
  }
  db.collection.save( doc );  
} );

我在这里所做的是迭代游标中的每个文档,并迭代它的messages属性,将每个元素的vots属性递增一。

问题在于以下情况:user1想要递增。但是在递增过程中,user2也希望递增相同的值。因此,user1和user2找到相同的初始文档,并将选票增量保存为1。User1保存,然后user2保存并擦除User1增量。你明白这个问题吗?@jeremieca-是的。但是这些对相同文档的同步请求和更新是在mongo级别处理的。您不必担心对同一资源的并行请求。如果存在冲突,mongodb将选择de最高版本。所以这是个问题。这就是为什么我想使用$inc。我不明白你说的最高版本是什么意思。Mongo将按照请求到达服务器的顺序处理请求。