$ lookup и $ unwind не дают результата, когда вложенный массив пуст - PullRequest
0 голосов
/ 09 мая 2018

У меня есть следующая коллекция сообщений

{
    "_id" : ObjectId("5ad5ddb15e540442a7d4213c"),
    "content" : "content1",
    "comments" : [ObjectId("5af2a10dc56ad8378a3fbffa")]
}

У меня есть следующая коллекция комментариев

{
    "_id" : ObjectId("5af2a10dc56ad8378a3fbffa"),
    "likeBy" : [ObjectId("5ac8ba3582c2345af70d4658")],
    "post" : ObjectId("5ad5ddb15e540442a7d4213c"),
    "comment" : "comment1",
}

Я сделал следующий $lookup запрос ... Запрос работает идеально, когда массив комментариев имеет ids как

"comments" : [ObjectId("5af2a10dc56ad8378a3fbffa")]

... Но когда комментарии очищаются как

    "comments" : []

затем он возвращает пустой массив ... По крайней мере, он должен вернуть первое match условие { $match: { _id: mongoose.Types.ObjectId(id) }} ...

const post = await Post.aggregate([
          { $match: { _id: mongoose.Types.ObjectId(id) }},
          { $lookup: {
              from: 'comments',
              localField: 'comments',
              foreignField: '_id',
              as: 'comments'
            }
          },
          { $unwind: '$comments' },
          { $addFields: {
            "comments.isLiked": {
              $in: [ 
                mongoose.Types.ObjectId(req.user.id), 
                "$comments.likeBy"
              ]
            }
          }}
          { $group: {
              _id: '$_id',
              content: {$first: '$content'},
              comments: {$push: '$comments'}
            }
          }
        ])

Так что мой ожидаемый результат должен быть

    {
        "_id" : ObjectId("5ad5ddb15e540442a7d4213c"),
        "content" : "222222222222222222222222222222222222222222",
        "comments" : []
    }

1 Ответ

0 голосов
/ 10 мая 2018

только preserveNullAndEmptyArrays до true по умолчанию имеет значение false.

{
      $unwind: {
        path: '$toUserData',
        preserveNullAndEmptyArrays: true,
      },
    },

Пожалуйста, обратитесь по ссылке: https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

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