MongoDB 3.4 - 是否可以使用 `$graphlookup` 或其他方式执行来自 2 个以上 collections 的连接?
MongoDB 3.4 - Is it possible to perform join from more than 2 collections using either `$graphlookup` or something else?
是否可以加入(使用 $graphlookup 或任何其他方法)超过 2 个 collections ?
例如我有 3 collections:
users、usergroups、queues 具有以下关系:
user
有一个或多个queues
user
有一个或多个usergroups
usergroup
有一个或多个queues
现在对于给定的 user
,我想要所有 queue
文档(直接关联,或通过用户组关联)
更新
这个查询对我有用:
{
"aggregate": "user",
"pipeline": [
{
"$match": {
"name": "test"
}
},
{
"$graphLookup": {
"from": "queue",
"startWith": "$queues",
"connectFromField": "queues",
"connectToField": "name",
"as": "userqueues"
}
},
{
"$graphLookup": {
"from": "usergroup",
"startWith": "$userGroups",
"connectFromField": "userGroups",
"connectToField": "name",
"as": "allusergroups"
}
},
{
"$unwind": "$allusergroups"
},
{
"$graphLookup": {
"from": "queue",
"startWith": "$allusergroups.queues",
"connectFromField": "allusergroups",
"connectToField": "name",
"as": "groupqueues"
}
}
]
}
试试这个聚合管道。
// Run this on user
[{
$lookup: {
"from": "queus",
"localField": "_id",
"foreignField": "user",
"as": "user_queus"
}
},
{
$lookup: {
"from": "usergroup",
"localField": "_id",
"foreignField": "users",
"as": "usergroups"
}
},
{
$unwind: "usergroups"
},
{
$lookup: {
"from": "queus",
"localField": "usergroups._id",
"foreignField": "usergroup",
"as": "usergroup_queus"
}
}
]
是否可以加入(使用 $graphlookup 或任何其他方法)超过 2 个 collections ? 例如我有 3 collections:
users、usergroups、queues 具有以下关系:
user
有一个或多个queues
user
有一个或多个usergroups
usergroup
有一个或多个queues
现在对于给定的 user
,我想要所有 queue
文档(直接关联,或通过用户组关联)
更新 这个查询对我有用:
{
"aggregate": "user",
"pipeline": [
{
"$match": {
"name": "test"
}
},
{
"$graphLookup": {
"from": "queue",
"startWith": "$queues",
"connectFromField": "queues",
"connectToField": "name",
"as": "userqueues"
}
},
{
"$graphLookup": {
"from": "usergroup",
"startWith": "$userGroups",
"connectFromField": "userGroups",
"connectToField": "name",
"as": "allusergroups"
}
},
{
"$unwind": "$allusergroups"
},
{
"$graphLookup": {
"from": "queue",
"startWith": "$allusergroups.queues",
"connectFromField": "allusergroups",
"connectToField": "name",
"as": "groupqueues"
}
}
]
}
试试这个聚合管道。
// Run this on user
[{
$lookup: {
"from": "queus",
"localField": "_id",
"foreignField": "user",
"as": "user_queus"
}
},
{
$lookup: {
"from": "usergroup",
"localField": "_id",
"foreignField": "users",
"as": "usergroups"
}
},
{
$unwind: "usergroups"
},
{
$lookup: {
"from": "queus",
"localField": "usergroups._id",
"foreignField": "usergroup",
"as": "usergroup_queus"
}
}
]