如何在MongoDB中使用过滤器位置操作符来更新特定的数组元素

215 阅读1分钟

关于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]
}

相关