如何使用聚合在猫鼬中对文档数组进行分页?
Posted
技术标签:
【中文标题】如何使用聚合在猫鼬中对文档数组进行分页?【英文标题】: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();
文档结构
有什么办法可以解决这个问题?非常感谢您。
【问题讨论】:
【参考方案1】:我对 mongoose 没有太多经验,但我可以编写一个 shell 查询来对数组执行分页。因此,您可以将其集成到 mongoose 中。
您无法分页的原因是您在group
之后应用了skip
和limit
,这为您提供了一个数组作为输出。因此,要在数组本身上应用分页,您需要使用 $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()
希望这会有所帮助:)
【讨论】:
感谢您提供的信息和代码,它非常适合我。 我很高兴它有帮助:)以上是关于如何使用聚合在猫鼬中对文档数组进行分页?的主要内容,如果未能解决你的问题,请参考以下文章