【发布时间】:2021-02-11 16:57:31
【问题描述】:
我需要一个 MongoDB 查询来返回来自事件、用户和确认集合的聚合结果。
db.events.aggregate([
{
"$match": {
"_id": "1"
}
},
{
"$lookup": {
"from": "confirmations",
"as": "confirmations",
"let": {
"eventId": "$_id"
},
"pipeline": [
{
"$match": {
"$expr": {
"$eq": [
"$eventId",
"$$eventId"
]
}
}
},
{
"$lookup": {
"from": "users",
"as": "user",
"let": {
"userId": "$confirmations.userId"
},
"pipeline": [
{
"$match": {
"$expr": {
"$eq": [
"$_id",
"$$userId"
]
}
}
},
]
},
},
]
}
}
])
想要的
[
{
"_id": "1",
"confirmations": [
{
"_id": "1",
"eventId": "1",
"user": {
"_id": "1",
"name": "X"
},
"userId": "1"
},
{
"_id": "2",
"eventId": "1",
"user": {
"_id": "2",
"name": "Y"
},
"userId": "2"
}
],
"title": "foo"
}
]
除了确认数组中的嵌入式用户外,一切正常。我需要输出显示确认用户,而不是空数组。
【问题讨论】:
-
看到这个playground你只需要更正用户的
$lookup并添加$unwind -
谢谢...虽然这是一个人为的例子。我很好奇如何使用嵌套的 $lookup 管道来解决。
标签: mongodb mongodb-query aggregation-framework