mongodb查找中的条件“ from”

时间:2019-05-22 05:50:25

标签: mongodb aggregation-framework

我正在尝试根据特定字段在多个集合中查找。 例如,如果字段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"
        }

    }])

任何帮助将不胜感激。

1 个答案:

答案 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..
       }
    }
])