分组后的跳过和限制在MongoDB查询中不起作用
我有100个项目,我想按状态分组,然后在其上添加分页。我想每个请求得到10个项目。当我运行我的查询,它返回给我所有的项目提供的名称。
这是我的例子
db.myCollection.aggregate([{
"$match": {
"name": "MyProject" }
}, {"$group": {"_id": { "status" : { "$ifNull" : ["$data.status", null]}}, "records": {"$push": "$$ROOT"}}}, {"$skip": 0}, {"$limit": 10}]);
返回所有项目。
我该如何解决这个问题?我不能在分组之后进行限制,如果我在分组操作之前进行限制,它会进行限制,但分组不能正常工作。
使用$setWindowFields
计算组排名,并使用相应的索引进行过滤。
db.projects.aggregate([
{
"$match": {
"name": "MyProject"
}
},
{
"$setWindowFields": {
"partitionBy": {
"$ifNull": [
"$status",
null
]
},
"sortBy": {
"createdDate": -1
},
"output": {
"inGroupRank": {
"$rank": {}
}
}
}
},
{
$match: {
inGroupRank: {
// pageSize: 5, pageIdx: 0
$gt: 0,
$lte: 5
}
}
},
{
$group: {
"_id": {
"$ifNull": [
"$status",
null
]
},
records: {
$push: "$$ROOT"
}
}
},
{
"$unset": "records.inGroupRank"
}
])
Mongo操场