【问题标题】:How can I paginate a document array in mongoose using aggregate?如何使用聚合在猫鼬中对文档数组进行分页?
【发布时间】:2020-07-26 07:23:48
【问题描述】:

我想对一组名为“Reviews”的文档进行分页,但我找不到方法,因为我执行的代码为我对文档进行了分页,而不是对文档数组“Reviews”进行了分页。

您尝试运行的代码

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();

文档结构

有什么办法可以解决这个问题?非常感谢您。

【问题讨论】:

    标签: database mongodb typescript mongoose


    【解决方案1】:

    我对 mongoose 没有太多经验,但我可以编写一个 shell 查询来对数组执行分页。因此,您可以将其集成到 mongoose 中。

    您无法分页的原因是您在group 之后应用了skiplimit,这为您提供了一个数组作为输出。因此,要在数组本身上应用分页,您需要使用 $slice 阅读更多信息 here

    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()
    

    希望这会有所帮助:)

    【讨论】:

    • 感谢您提供的信息和代码,它非常适合我。
    • 我很高兴它有帮助:)
    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2017-06-06
    • 2017-02-27
    • 2016-06-12
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多