如何对MongoDB集合中的子文档进行分页?

ffx8fchx  于 2022-12-12  发布在  Go
关注(0)|答案(1)|浏览(258)

我有一个MongoDB集合,它具有以下数据结构;

[ 
  {  
    "_id": "1",
    "name": "businessName1",
    "reviews": [
      {
        "_id": "1",
        "comment": "comment1",
      },
      {
        "_id": "2",
        "comment": "comment1",
      },
     ...
    ]     
  } 
]

正如您所看到的,每个企业的评论都是集合中的一个子文档,其中businessName 1总共有2条评论。在我的真实的MongoDB集合中,每个企业有100条评论。我只想在一个页面上使用分页查看10条评论。
我目前在Python中有一个find_one()函数,它可以检索这个单一的业务,但也可以检索它的所有评论。

businesses.find_one( \
        { "_id" : ObjectId(1) }, \
        { "reviews" : 1, "_id" : 0 } )

我知道Python中的**skip()limit()**方法,可以限制检索结果的数量,但据我所知,只能在find()方法上执行这些方法,对吗?

xfyts7mz

xfyts7mz1#

选项1:您可以使用$slice进行分页,如下所示:

db.collection.find({
 _id: 1
},
{
 _id: 0,
 reviews: {
   $slice: [
    3,
    5
   ]
 }
})

Playground

选项2:或者通过聚合+总阵列大小可能更好:

db.collection.aggregate([
 {
  $project: {
  _id: 0,
  reviews: {
    $slice: [
      "$reviews",
      3,
      5
    ]
  },
  total: {
    $size: "$reviews"
  }
 }
}
])

Playground

相关问题