如何在MongoDB集合分页子文档?



我有一个MongoDB集合与以下数据结构;

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

可以看到,每个业务的评论都是集合中的一个子文档,其中businessName1总共有2条评论。在我真正的MongoDB集合中,每个业务都有100条评论。我想使用分页在一个页面上只查看10个。

我目前在Python中有一个find_one()函数,它检索这个单一业务,但它也检索它的所有评论。

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

我知道skip()限制()方法中,您可以限制检索结果的数量,但据我所知,您只能在find()方法上执行这些方法。这是正确的吗?

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

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

游乐场


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

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

游乐场

最新更新