【发布时间】:2020-09-25 05:05:22
【问题描述】:
我有以下包含四个嵌套数组的示例文档
{
"_id" : ObjectId("5ed6bd9596908c36f4200980"),
"attr2" : "hello",
"attr3" : 1234,
"attr1" : {
"firstArray" : [
{
"secondArray" : [
{
"secondAttr1" : "world",
"secondAttr2" : 456,
"secondAttr3" : [
{
"finalArray" : [
{
"finalAttr1" : "alex",
"finalAttr2" : 9876
}
]
}
]
}
]
}
]
}
}
这个聚合查询通过嵌套数组查找,展开并为每个处理的数组创建新根,从“finalArray”返回元素
db.AssetTest.aggregate(
[
{'$match':{'$and':[{'attr2': {'$eq':'hello'}}]}},
{'$project': {'values': '$attr1.firstArray'}},
{'$unwind':'$values'},
{'$replaceRoot':{'newRoot':'$values'}},
{'$project': {'values': {'$filter': {'input': '$secondArray','cond': {'$and':[{'$eq':['$$this.secondAttr1', 'world']}]}}}}},
{'$unwind':'$values'},
{'$replaceRoot':{'newRoot':'$values'}},
{'$project': {'values': '$secondAttr3'}},
{'$unwind':'$values'},
{'$replaceRoot':{'newRoot':'$values'}},
{'$project': {'values': {'$filter': {'input': '$finalArray','cond': {'$and':[{'$eq':['$$this.finalAttr1', 'alex']}]}}}}},
{'$unwind':'$values'},
{'$replaceRoot':{'newRoot':'$values'}}
]
)
这个聚合的结果是
{
"finalAttr1" : "alex",
"finalAttr2" : 9876
}
我的问题是,我怎样才能通过所有聚合阶段投影根字段“attr2”,以便它将在结果数组上?
{
"attr2" : "hello",
"finalAttr1" : "alex",
"finalAttr2" : 9876
}
我是 mongo 的新手,对此我完全迷失了,所以非常感谢任何帮助。
顺便说一句,我使用的是 mongo 3.4.15。
非常感谢!!
【问题讨论】:
标签: arrays mongodb mongodb-query aggregation-framework