使用mongo分页查询并返回总条数
mongo中分页查询并返回总条数db.getCollection(test).aggregate([{"$match}])
·
mongo分页查询时,使用聚合查询会比条数和数据分开查询更方便.
使用$facet可以事半功倍.
$facet的用法允许您创建多方面的聚合,这些聚合可表征单个聚合阶段中多个维度或方面的数据。多方面的聚合提供了多种过滤器和分类,以指导数据浏览和分析。
以下是示例
{
"_id" : ObjectId("604b653fc20635d128c5c09d"),
"deleted" : true,
"userId" : 1,
"userName" : "哈哈哈"
}
{
"_id" : ObjectId("604b655cc20635d128c5c0a5"),
"deleted" : false,
"userId" : 2,
"userName" : "呵呵呵"
}
{
"_id" : ObjectId("604b656ec20635d128c5c0ab"),
"deleted" : false,
"userId" : 3,
"userName" : "周杰伦"
}
{
"_id" : ObjectId("604b659ec20635d128c5c0b9"),
"deleted" : false,
"userId" : 4,
"userName" : "周润发"
}
...
匹配条件并进行分页查询
db.getCollection('user').aggregate([
{"$match":{"deleted":{"$ne":true}}},
{
"$facet":{
"total":[
{"$count":"total"}
],
"data":[
{"$skip":0},
{"$limit":2}
]
}
}
])
查询结果:
{
"total" : [
{
"total" : 3
}
],
"data" : [
{
"_id" : ObjectId("604b655cc20635d128c5c0a5"),
"deleted" : false,
"userId" : 2,
"userName" : "呵呵呵"
},
{
"_id" : ObjectId("604b656ec20635d128c5c0ab"),
"deleted" : false,
"userId" : 3,
"userName" : "周杰伦"
}
]
}
这样就实现了一次查询返回结果和总数.
整合springboot后,使用mongotemplate进行查询,代码如下:
Aggregation deleted = Aggregation.newAggregation(
match(Criteria.where("deleted").ne(true)),
Aggregation.facet(count().as("total")).as("count")
.and(skip(0L),limit(2L)).as("data")
);
AggregationResults<HashMap> user = mongoTemplate.aggregate(deleted, "user", HashMap.class);
System.out.println(user.getMappedResults());
[{data=[{_id=604b655cc20635d128c5c0a5, deleted=false, userId=2, userName=呵呵呵}, {_id=604b656ec20635d128c5c0ab, deleted=false, userId=3, userName=周杰伦}], count=[{total=3}]}]
更多推荐
已为社区贡献1条内容
所有评论(0)