有没有一种方法可以用于MongoDB聚合框架:
$match
返回的文档数$match
全部查询?我当时在想,可能有一种方法可以在管道中使用多个$group
阶段来在附加的$match
之前对文档进行计数,然后将结果传递给第二个$group
。但是我还没有找到一种方法来解决这个问题。
答案 0 :(得分:1)
是的,这是可能的,您需要$facet流水线阶段,该阶段可以执行多个子聚合。给定这样的数据:
db.col.save({ a: 1, b: 2 })
db.col.save({ a: 1, b: 2 })
db.col.save({ a: 1, b: 2 })
db.col.save({ a: 1, b: 4 })
db.col.save({ a: 3, b: 2 })
您可以使用以下汇总:
db.col.aggregate([
{
$match: { a: 1 }
},
{
$facet: {
total : [
{ $count: "count" }
],
subset: [
{ $match: { b: 2 } },
{ $project: { _id: 0 } }
]
}
}
])
输出:
{ "total" : [ { "count" : 4 } ], "subset" : [ { "a" : 1, "b" : 2 }, { "a" : 1, "b" : 2 }, { "a" : 1, "b" : 2 } ] }
每个子聚合将作为数组返回,但是您可以在$unwind
上应用下一个流水线阶段,例如count
。