MongoDB Aggregation $ lookup $ match - PullRequest
1 голос
/ 14 января 2020

моя коллекция подключений имеет поле ObjectId Array с именем авторов. Я хочу объединить все имена и фамилии из массивов авторов. Прямо сейчас я получаю имена от всех пользователей в коллекции. Не удалось получить агрегацию $ match для работы. Спасибо!

Схема соединений

const connectionSchema = new mongoose.Schema({
  authors: [{ type: mongoose.Schema.Types.ObjectId, required: true }],
  messages: [messageSchema]
});

Проблема в коде

   const connections = await Connection.aggregate([

    {
      $lookup: {
        from: "users",
        let: { users: "users" },
        pipeline: [
          { $match: { _id: { $in: ["_id", "$authors"] } } },
          {
            $project: {
              name: {
                $concat: ["$firstname", " ", "$lastname"]
              }
            }
          }
        ],
        as: "userName"
      }
    },

1 Ответ

0 голосов
/ 14 января 2020

У вас есть authors поле в connection схеме. Так что вместо этого используйте authors в let переменную, чтобы использовать в users конвейер { "$in": ["$_id", "$$authors"] }.

const connections = await Connection.aggregate([
  {
    "$lookup": {
      "from": "users",
      "let": { "authors": "$authors" },
      "pipeline": [
        { "$match": { "$expr": { "$in": ["$_id", "$$authors"] } } },
        {
          "$project": {
            "name": {
              "$concat": ["$firstname", " ", "$lastname"]
            }
          }
        }
      ],
      "as": "userName"
    }
  }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...