[英]MongoDB - How to find and update elements in a nested array
這是集合:
db.employees.insertMany([
{
"data": {
"category": [
{
"name": "HELLO",
"subcategory": [
"EDUCATION",
"ART",
]
},
{
"name": "HELLO",
"subcategory": [
"GG",
"ART",
]
},
{
"name": "HELLO",
"subcategory": [
"EDUCATION",
"SHORE",
]
}
]
}
},
{
"data": {
"category": [
{
"name": "HELLO",
"subcategory": [
"EDUCATION",
"HELLO",
]
}
]
}
},
{
"data": {
"category": [
{
"name": "HELLO",
"subcategory": [
"GG",
"ART",
]
}
]
}
}
]);
我想要的是用包含“教育”的“子類別”定位“類別”中的元素,並用另一個字符串替換“教育”,比如說“體育”。
我嘗試了幾個命令,但沒有真正完成這項工作:
db.employees.updateMany({
"data.category.subcategory": "EDUCATION"
},
{
"$set": {
"data.category.$": {
"subcategory": "SPORTS"
}
}
})
我看到的是它不會通過替換元素來更新元素,也不會替換符合條件的每個元素。
認為帶有聚合管道的 MongoDB 更新可以滿足您的方案。
$set
- 設置data.category
值。
1.1。 $map
- 迭代data.caetgory
中的每個元素並返回一個數組。
1.1.1。 $mergeObjects
- 將當前文檔與來自1.1.1.1的subcategory
字段的文檔合並。
1.1.1.1 $map
- 迭代subcategory
數組中的每個值。 使用$cond
將單詞EDUCATION
替換為SPORTS
如果完成,否則使用現有值 ( $$this
)。
db.employees.updateMany({
"data.category.subcategory": "EDUCATION"
},
[
{
"$set": {
"data.category": {
$map: {
input: "$data.category",
in: {
$mergeObjects: [
"$$this",
{
subcategory: {
$map: {
input: "$$this.subcategory",
in: {
$cond: {
if: {
$eq: [
"$$this",
"EDUCATION"
]
},
then: "SPORTS",
else: "$$this"
}
}
}
}
}
]
}
}
}
}
}
]
這是使用"arrayFilters"
的另一種方法。
db.collection.update({
"data.category.subcategory": "EDUCATION"
},
{
"$set": {
"data.category.$[].subcategory.$[elem]": "SPORTS"
}
},
{
"arrayFilters": [
{ "elem": "EDUCATION" }
],
"multi": true
})
在mongoplayground.net上試試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.