我正在尝试根据特定字段在多个集合中查找。
例如,如果字段type
等于1
,则从Admin
查找集合,如果类型等于2
,则从Client
查找。我知道以下查询是不正确的,但我只想表明我的意思。
db.User.aggregate([
{
"$lookup":{
"localField":"ID",
"from":{"$cond": { if: { "type":1 } ,then: "Admin", else: "Client"} },
"foreignField":"ID",
"as":"newUser"
},
{
"$unwind":"$newUser"
}
}])
任何帮助将不胜感激。
答案 0 :(得分:0)
坏消息,你不能,唯一的解决方法是使用$facet并有2个独立的管道。
您可能会想象这不是一个很好的解决方案,因为它浪费了冗余管道上的资源。
我不确定您是否可以包含一些代码,但是如果可以的话,这是您的最佳选择。
$ facet管道草稿:
db.User.aggregate([
{
$facet: {
user: [
{
"$lookup":{
"localField":"ID",
"from":Client,
"foreignField":"ID",
"as":"newUser"
},
},
{
"$unwind":"$newUser"
}],
admin: [
{
"$lookup":{
"localField":"ID",
"from":Admin,
"foreignField":"ID",
"as":"newUser"
},
},
{
"$unwind":"$newUser"
}],
}
},
{
$match: {
use "correct" user here..
}
}
])