我有一个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"
}
}
}
])
游乐场