我想执行一个进行基本分页的聚合查询:
- 查找属于某个
company_id
的所有订单 - 按
order_number
对订单进行排序 - 计算文档总数
- 跳转到例如文件编号
100
,并将其传递给其他人 - 将文档数量限制为
2
个,并将其传递 - 通过返回计数和文档中选定的几个字段来完成
以下是查询的详细信息:
db.Order.collection.aggregate([
这将查找所有匹配的文档:
{ '$match' : { "company_id" : ObjectId("54c0...") } },
这将对文档进行排序:
{ '$sort' : { 'order_number' : -1 } },
这会对文档进行计数,并传递未修改的文档,但我肯定这样做是错误的,因为事情从这里开始变得很奇怪:
{
'$group' : {
'_id' : null,
'count' : { '$sum' : 1 },
'entries' : { '$push' : "$$ROOT" }
}
},
这似乎跳过了一些文档:
{ "$skip" : 100 },
这本应限制文件,但却没有:
{ "$limit" : 2 },
这会返回计数,但不会返回数组中的文档,而是返回每个字段的数组:
{ '$project' : {
'count' : 1,
'entries' : {'_id' : "$entries._id", 'order_number' : "$entries.order_number"}
}
}
])
结果是:
[
{ "_id" : null,
"count" : 300,
"entries" : [
{
"_id" : [ObjectId('5a5c...'), ObjectId('5a5c...')],
"order_number" : ["4346", "4345"]
},
{
"_id" : [ObjectId('5a5c...'), ObjectId('5a5c...')],
"order_number" : ["4346", "4345"]
},
...
]
}
]
我哪里弄错了?