在MongoDB中,我有一个包含多种语言的电影集合,例如
languages: [0:USA, 1: German, 2: French, ...etc]
数组值不是任何特定顺序.
我现在如何根据某些特定值更新数组值?假设我要更新所有"法语"并将其替换为"Francais"以用于整个集合.我怎样才能做到这一点?
chr*_*dam 14
使用位置$运算符来标识languages数组中的元素,而不显式指定它在数组中的位置,而不是事先知道位置并将元素更新为:
db.movies.updateMany(
{ "languages": "French" },
{ "$set": { "languages.2": "Francais" } }
)
Run Code Online (Sandbox Code Playgroud)
你可以使用$运算符:
db.movies.updateMany(
{ "languages": "French" },
{ "$set": { "languages.$": "Francais" } }
)
Run Code Online (Sandbox Code Playgroud)
如果您的数组中有重复的条目,如下所示:
"languages" : [
"USA",
"German",
"Francais",
"Francais"
]
Run Code Online (Sandbox Code Playgroud)
您可以使用以下语法替换从 MongoDB v3.5.12 开始的所有匹配项(文档)
db.movies.updateMany(
{ "languages": "French" },
{ "$set": { "languages.$[filter]": "Francais" } },
{ "arrayFilters": [ { "filter": "French" } ] }
)
Run Code Online (Sandbox Code Playgroud)
严格来说,{ "languages": "French" }过滤器是不需要的。但是,如果有“语言”索引,它将通过利用“语言”索引来加快速度。如果不需要/不需要,传递一个简单的{}值作为第一个参数也可以。