$ concat с полями поиска? - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь $concat некоторые поля в агрегации MongoDB.Проблема в том, что они пришли из $lookup и, по-видимому, их нельзя объединить просто так.Вот что я пытаюсь:

    {
        $lookup: {
            from: 'users',
            localField: 'user_id',
            foreignField: '_id',
            as: 'user'
        }
    },
    {
        $project: {
            'fullname': { $concat: ['$user.lastname', ', ', '$user.firstname' ] }
        }
    }

Это приводит к следующему сообщению об ошибке:

$concat only supports strings, not array

Интересно, если я использую $concatArrays, сообщение будет:

$concatArrays only supports arrays, not string

Итак, как мне обратиться к полю поиска в $concat?

1 Ответ

0 голосов
/ 01 июня 2018

Это потому, что user - это массив, когда он выходит из $lookup

Используйте $arrayElemAt, когда вы знаете, что у вас есть только 1 результат:

{ "$project": {
  "fullname": {
    "$let": {
      "vars": { "user": { "$arrayElemAt": ["$user",0] },
      "in": { "$concat": [ "$$user.lastname", ", ", "$$user.firstname" ] }
    }
  }
}}

Или просто $unwind, если у вас их больше одного:

  { "$unwind": "$user" },
  { "$project": {
    "fullname": { "$concat": [ "$user.lastname", ", ", "$user.firstname"' ] }
  }}

Вывод "Always" массив, даже если это только один результат или много или даже нет.Таким образом, вы должны обращаться с соответствующим оператором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...