关于MongoDB的全面概述和我所有关于它的帖子,请查看我的概述。
MongoDB提供了一个过滤器位置运算符$[<name_of_filter>] ,只更新数组中的某些元素。如果你想更新数组中的所有元素,请使用MongoDB中的all定位操作符来更新数组中的所有元素。
你必须在一个叫做arrayFilters 的属性中定义要使用的过滤器。
随着以下数据插入到一个名为games 的集合中:
db.games.insertMany(
{
name: "Genshin Impact",
reviewScores: [8, 6, 9, 5]
},
{
name: "Factorio",
reviewScores: [7, 7, 10, 8]
},
{
name: "Bloodborne",
reviewScores: [9, 8, 9, 9]
}
)
对于游戏Genshin Impact ,将所有小于9的评论增加1:
db.games.updateMany(
{ name: "Genshin Impact" },
{ $inc: { "reviewScores.$[reviews]": 1 } },
{ arrayFilters: [
{ "reviews": { $lt: 9 } }
]}
)
注意在$inc 更新操作中,我们引用了定义为reviews 的数组过滤器来告诉MongoDB要更新哪些元素。
使用find方法从MongoDB中读回数据以查看结果:
{
name: "Genshin Impact",
reviewScores: [9, 7, 9, 6]
},
{
name: "Factorio",
reviewScores: [7, 7, 10, 8]
},
{
name: "Bloodborne",
reviewScores: [9, 8, 9, 9]
}