Как можно разбить массив документов на пн goose, используя агрегат - PullRequest
1 голос
/ 13 апреля 2020

Я хочу разбить на страницы массив документов под названием «Обзоры», но не могу найти способ сделать это, так как код, который я выполняю, разбивает документы на меня, а не на массив документов «Обзоры».

Код, который вы пытались запустить

return await this.animeModel
  .aggregate()
  .match({ _id: Types.ObjectId(reviewPaginateData.animeId) })
  .unwind('$reviews')
  .group({
    _id: '$_id',
    reviews: { $push: '$reviews' },
  })
  .sort(reviewPaginateData.sort)
  .limit(reviewPaginateData.limit)
  .skip(reviewPaginateData.limit * reviewPaginateData.skip)
  .exec();

Структура документа

Document structure

Есть ли способ решить эту проблему? Заранее большое спасибо.

1 Ответ

1 голос
/ 13 апреля 2020

У меня нет большого опыта работы с mon goose, но я могу написать запрос оболочки для разбивки на массивы. Таким образом, вы можете интегрировать его в mon goose.

Причина, по которой вы не можете разбить на страницы, заключается в том, что вы применяете skip и limit после group, что дает вам массив в качестве вывода. Таким образом, чтобы применить нумерацию страниц к самому массиву, вам нужно использовать $slice для дополнительной информации здесь

db.collection.aggregate([
  {
    $match:{
      "_id":ObjectId("xyz")
    }
  },
  {
    $unwind:"$reviews"
  },
  {
    $group:{  
      "_id":"$_id",
      "reviews":{
        $push:"$reviews"
      }
    }
  },
  {
    $sort:{
      sort_value:1
    }
  },
  {
    $project:{
      "reviews":{
        $slice:[
          "$reviews",
          skip_value,
          limit_value
        ]
      }
    }
  }
]).pretty()

Надеюсь, это поможет:)

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