這是我收藏的內容:
[{
"_id": {
"$oid": "61b253a89e51973f978b818d"
},
"id": 1,
"level1": [
{
"name": "child11",
"level2": [
{
"name": "chil21"
},
{
"name": "chilxx"
}
]
},
{
"name": "child12",
"level2": [
{
"name": "chil23"
},
{
"name": "chil24"
}
]
}
]
},{
"_id": {
"$oid": "61b254b69e51973f978b818e"
},
"id": 2,
"level1": [
{
"name": "child13",
"level2": [
{
"name": "chil25"
},
{
"name": "chil26"
}
]
},
{
"name": "child14",
"level2": [
{
"name": "chil27"
},
{
"name": "chil28"
},
{
"name": "chilxx"
},
{
"name": "chil2a"
}
]
}
]
}]
我現在想聚合這樣
- 聚合檔案與集合中的原始檔案具有相同的結構
- 該
level1陣列只包含元素本身包含一個level2與元件name = chilxx
因此,預期的聚合輸出應該是:
[{
"_id": {
"$oid": "61b253a89e51973f978b818d"
},
"id": 1,
"level1": [
{
"name": "child11",
"level2": [
{
"name": "chil21"
},
{
"name": "chilxx"
}
]
}
]
},{
"_id": {
"$oid": "61b254b69e51973f978b818e"
},
"id": 2,
"level1": [
{
"name": "child14",
"level2": [
{
"name": "chil27"
},
{
"name": "chil28"
},
{
"name": "chilxx"
},
{
"name": "chil2a"
}
]
}
]
}]
這是我的(不作業)聚合方法:
[
{
'$match': {}
}, {
'$project': {
'_id': 1,
'id': 1,
'level1': {
'$filter': {
'input': '$level1',
'as': 'l1',
'cond': {
'$$l1.level2': {
'$elemMatch': {
'name': 'chilxx'
}
}
}
}
}
}
}
]
但是,這會導致錯誤:
Invalid $project :: caused by :: Unrecognized expression '$$l1.level2'
先感謝您。
uj5u.com熱心網友回復:
$match$set
db.collection.aggregate([
{
"$match": {
"level1.level2.name": "chilxx"
}
},
{
"$set": {
"level1": {
"$filter": {
"input": "$level1",
"as": "first",
"cond": {
$ne: [
{
"$filter": {
"input": "$$first.level2",
"as": "second",
"cond": {
$eq: [
"$$second.name",
"chilxx"
]
}
}
},
[]
]
}
}
}
}
}
])
mongoplayground
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/378791.html
