Обновить объект массива mongoDB

У меня есть массив объектов, и я хотел бы обновить количество объектов, где categoryId = "menu2" и subCategoryId = "1".

в моем mongodb у меня сейчас есть две записи в массиве:

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

если я сейчас выполню следующий метод, объект с категориейId "menu1" будет обновлен, а не мой menu2...

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

Я использую коллекцию io.quarkus.mongodb.reactive.ReactiveMongoCollection.

Заранее спасибо!

1 ответ

Отфильтрованный позиционный оператор работает:

      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")
          ))));

Почему другой метод не работает, я, к сожалению, не знаю.

Другие вопросы по тегам