Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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数组中的条件$inc_Mongodb_Mongodb Query_Nosql - Fatal编程技术网

嵌套MongoDB数组中的条件$inc

嵌套MongoDB数组中的条件$inc,mongodb,mongodb-query,nosql,Mongodb,Mongodb Query,Nosql,我的数据库如下所示: { _id: 1, values: [ 1, 2, 3, 4, 5 ] }, { _id: 2, values: [ 2, 4, 6, 8, 10 ] }, ... 我想更新每个文档的嵌套数组(“值”)中满足某些条件的每个值。例如,我想将>=4的每一个值增加1,这应该产生: { _id: 1, values: [ 1, 2, 3, 5, 6 ] }, { _id: 2, values: [ 2, 5, 7, 8, 11 ] }, ... 我习惯于使用SQ

我的数据库如下所示:

{
 _id: 1,
 values: [ 1, 2, 3, 4, 5 ]
},
{
 _id: 2,
 values: [ 2, 4, 6, 8, 10 ]
}, ...
我想更新每个文档的嵌套数组(“值”)中满足某些条件的每个值。例如,我想将>=4的每一个值增加1,这应该产生:

{
 _id: 1,
 values: [ 1, 2, 3, 5, 6 ]
},
{
 _id: 2,
 values: [ 2, 5, 7, 8, 11 ]
}, ...
我习惯于使用SQL,其中嵌套的数组将是一个单独的表,用唯一的ID连接。在这个新的NoSQL世界中,我有点迷失了方向


非常感谢,

使用嵌套数组确实不可能进行这种更新,原因在操作员文档中给出,并且说明您只能为查询中的给定条件匹配第一个数组元素

这样的说法:

{
 _id: 1,
 values: [ 1, 2, 3, 4, 5 ]
},
{
 _id: 2,
 values: [ 2, 4, 6, 8, 10 ]
}, ...
db.collection.update(
{“值”:{“$gte”:4},
{“$inc”:{“values.$”:1}
)
在只有匹配的“第一个”数组元素才会递增的情况下,将不起作用。因此,在您的第一份文档中,您将看到:

{u id:1,“值”:[1,2,3,6,6]}
为了按照建议更新值,您需要迭代文档和数组元素以生成结果:

db.collection.find({“value”:{“$gte”:4}).forEach(函数(doc){
对于(变量i=0;i=4){
文档值[i]++;
}
}
db.collection.update(
{u id:doc.\u id},
{“$set”:{“values”:doc.values}
);
})
或者任何与这个基本概念相当的代码

一般来说,这种更新不适合包含数组中元素的结构。如果这确实是您的需要,那么最好将元素列在单独的集合中


再一次,这个问题的陈述更多的是一个“假设”的情况,没有理解您执行这种udpate的实际用例。因此,如果您可能在另一个问题中描述了您实际需要做什么以及数据的真实外观,那么您可能会得到一个更有意义的回答,即您可以使用的最佳方法。

谢谢,这就是我需要的信息。现在我知道这是不可能的,我要么手动循环,要么以不同的方式构造数据。感谢您及时、翔实的回复。