我是 mongo 的新手,我的查询使用mongodb 聚合框架。我需要检索一些满足某些条件的记录(包括分页+排序)并获取记录总数。
现在,我执行以下步骤:
- 创建
$match
运算符
{ "$match" : { "year" : "2012" , "author.authorName" : { "$regex" : "au" , "$options" : "i"}}}
- 添加了排序和分页
{ "$sort" : { "some_field" : -1}} , { "$limit" : 10} , { "$skip" : 0}
查询后,我收到了预期的结果:10 个包含所有字段的文档。
对于分页,我需要知道满足这些条件的记录总数,在我的例子中是 25。
我使用下一个查询来获取计数:{ "$match" : { "year" : "2012" , "author.authorName" : { "$regex" : "au" , "$options" : "i"}}} , { "$group" : { "_id" : "$all" , "reviewsCount" : { "$sum" : 1}}} , { "$sort" : { "some_field" : -1}} , { "$limit" : 10} , { "$skip" : 0}
但我不想执行两个单独的查询:一个用于检索文档,第二个用于满足特定条件的记录总数。
我想在一个查询中完成并以下一种格式获得结果:
{
"result" : [
{
"my_documets": [
{
"_id" : ObjectId("512f1f47a411dc06281d98c0"),
"author" : {
"authorName" : "author name1",
"email" : "email1@email.com"
}
},
{
"_id" : ObjectId("512f1f47a411dc06281d98c0"),
"author" : {
"authorName" : "author name2",
"email" : "email2@email.com"
}
}, .......
],
"total" : 25
}
],
"ok" : 1
}
我尝试修改组运算符: { "$group" : { "_id" : "$all" , "author" : "$author" "reviewsCount" : { "$sum" : 1}}}
但在这种情况下,我得到:“异常:组聚合字段'作者'必须定义为对象内的表达式”。如果在 _id 中添加所有字段,则 reviewsCount 总是 = 1,因为所有记录都不同。
没有人知道它如何在单个查询中实现?也许 mongodb 对于这种情况有一些特性或操作符?使用两个单独的查询实现会降低查询数千或数百万条记录的性能。在我的应用程序中,这是非常关键的性能问题。
我整天都在研究这个问题,但找不到解决方案,所以我想求助于 stackoverflow 社区。
谢谢。