условное 'from' в поиске mongodb - PullRequest
1 голос

Я пытаюсь найти несколько коллекций на основе определенного поля. например, если поле 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 Ответ

1 голос
/ 22 мая 2019

Плохие новости, вы не можете, единственное решение - использовать $ facet и иметь 2 отдельных конвейера.

Как вы, вероятно, представляете, это не очень хорошее решение, поскольку оно тратит ресурсы на резервный конвейер.

Я не уверен, что вы можете задействовать какой-то код, но если вы можете, это ваш лучший вариант.

$ Фасет конвейера $:

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..
       }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...