作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在以下查询中:
db.orders.aggregate([{ $match : { status: "A"}, { $limit: 5} }]);
如何在 $match
之后但在应用 $limit
之前获取文档数?
我仍然想返回一个包含 5 个文档的数组。但是如果我使用 $group
似乎它不会保留文档数组。可以一个电话完成,还是我必须打两个电话?
最佳答案
从 Mongo 3.4
开始,$facet
聚合阶段允许在单个阶段内处理同一组输入文档上的多个聚合管道:
// { "status" : "A", "v" : 3 }
// { "status" : "B", "v" : 14 }
// { "status" : "A", "v" : 7 }
// { "status" : "A", "v" : 5 }
db.collection.aggregate(
{ $match: { status: "A"} },
{ $facet: {
count: [{ $count: "count" }],
sample: [{ $limit: 2 }]
}}
)
// {
// "count" : [ { "count" : 3 } ],
// "sample" : [ { "status" : "A", "v" : 3 }, { "status" : "A", "v" : 7 } ]
// }
这个:
首先match
匹配status
为A
的文档。
然后通过 $facet
阶段从两个不同的聚合管道中生成两个字段:
$count
仅提供从前面的 $match
阶段生成的文档数。
sample
,它是从前面的 $match
阶段产生的文档的 $limit
ed 提取。
关于mongodb - 如何在 Mongo 聚合管道中获取限制之前的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917987/
我是一名优秀的程序员,十分优秀!