背景:
mongo有一个用户集合,里面有一个字段存放了用户收藏信息,该doc字段如下:
有一个需求,获取用户的收藏信息,并分页。分页一般需要返回:总数量,每一个页面的具体数据。
两种方式:
1. 一次查询,利用aggregate聚合字段
可能查询会有高额的开销
结果rt:
查询的语句为:
db.getCollection('users').aggregate([
{"$project": { "stars": 1 }}, // 只返回收藏字段
{
"$facet": {
"data": [
{ "$match": { "_id":ObjectId("627d1b95bc1c4fe8944528f8") }}, // 根据用户id查询
{ "$skip": 0 }, // 分页
{ "$limit": 10 },
],
"totalCount": [
{ "$count": "count" } // 返回查询的总数
]
}
}
])
2. 两次查询
先通过
db.getCollection('users').aggregate(
[
{
$match:{
"_id": ObjectId("627d1b95bc1c4fe8944528f8"),
}
},
{
$project:{
count: {
"$size": "$stars"
}
}
}
])
获得总长度
再通过findOne方法,用$slice
截取即可