更新数组对象 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")
))));
为什么其他方法不起作用,很遗憾,我不知道。
我有一个对象数组,想更新 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")
))));
为什么其他方法不起作用,很遗憾,我不知道。