更新数组对象 mongoDB

Update array object mongoDB

我有一个对象数组,想更新 categoryId = "menu2" 和 subCategoryId = "1" 的对象的计数。

在我的 mongodb 中,我目前在数组中有两条记录:

{
    "_id": "xyz",
    "badges": [{
        "count": 2,
        "categorieId": "menu1",
        "subCategorieId": "1"
    }, {
        "count": 1,
        "categorieId": "menu2",
        "subCategorieId": "1"
    }]
}

如果我现在执行以下方法,将更新 categorieId 为“menu1”的对象,而不是我的 menu2...

return getCollection()
      .updateOne(
        and(
          eq("badges.categorieId", "menu2"),
          eq("badges.subCategorieId", "1")
        ),
        Updates.inc("badges.$.count", 1)
      );

我正在使用 io.quarkus.mongodb.reactive.ReactiveMongoCollection。

提前致谢!

您可以使用“$[]”数组更新运算符来更新数组中的所有匹配元素。在您的情况下,它将是这样的:

Updates.inc("badges.$[].count",1)

官方详细介绍MongoDB documentation

过滤后的位置运算符正在运行:

return getCollection().updateOne(
      eq("_id", "xyz"),
      Updates.combine(
        Updates.inc("badges.$[badges].count", 1)
      ),
      new UpdateOptions()
        .arrayFilters(Arrays.asList(
          and(
            eq("badges.categorieId", "menu2"),
            eq("badges.subCategorieId", "1")
          ))));

为什么其他方法不起作用,很遗憾,我不知道。