嵌套数组内的Mongodb增量值

Posted

技术标签:

【中文标题】嵌套数组内的Mongodb增量值【英文标题】:Mongodb Increment value inside nested array 【发布时间】:2013-04-08 21:38:47 【问题描述】:

我正在为 Spring 使用 mongotemplate,我想知道如何以原子方式增加我在数组中的一个文档的值。想象一下我们有

'a':1,
   b:[_id:341432,
       c:2
      ,
      _id:341445,
       c:3
      ];

我想要的是 _id 341445 的 c 从 3 增加到 4

我一直在使用 findAndModify,但我不知道如何将它用于数组中的嵌套文档。

问候。

【问题讨论】:

到目前为止,我发现的唯一一件事就是确定数组的索引,比如 b.0.c=11111 有什么更好的主意吗? 【参考方案1】:

要更新数组字段中的元素,可以使用positional $ operator

例如,下面的 js 为 _id 341445 将 c 从 3 递增到 4:

db.collection.update(a:1, "b._id":341445 , $inc:"b.$.c":1)

【讨论】:

谢谢!但请记住,您的答案必须外推到 Java 当更新查询与 upsert 一起使用时,这将不起作用。 谢谢谢谢谢谢。我已经花了三个多小时试图让它工作!!!很好的答案! @Lind Qin,谢谢它有效。这里为可能感兴趣的人提供 spring 数据解决方案:mongoOperations.updateFirst(new Query(Criteria.where("a").is(1).and("b._id").is(341445)),new Update().inc("b.$.c", 1), YourClass.class);

以上是关于嵌套数组内的Mongodb增量值的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb嵌套文档的修改-利用数组修改器更新数据

MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误

从项目数组设置增量值

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

MongoDB:如何使用查找查询填充嵌套对象?

MongoDB的增删改查