mongodb - 如何在 Mongo 聚合管道中获取限制之前的计数

标签 mongodb count limit aggregation-framework

在以下查询中:

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匹配statusA的文档。

  • 然后通过 $facet 阶段从两个不同的聚合管道中生成两个字段:

    • $count 仅提供从前面的 $match 阶段生成的文档数。

    • sample,它是从前面的 $match 阶段产生的文档的 $limited 提取。

关于mongodb - 如何在 Mongo 聚合管道中获取限制之前的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25917987/

相关文章:

mongodb - 分析和搜索地理空间数据(大数据)

arrays - 在 Matlab 元胞数组中查找不同值的出现次数

mysql - 一个表中的多个计数无意中对行中的列求和

python - python如何限制输入的字符类型

java - 使用 Spring Data 按提取的日期、月份和年份聚合项目组

MongoDB - 如何获取包含 child 数量的文档

MongoDB 缓存或不缓存使用 Redis

mysql - 计算一些数据数组不起作用

google-chrome-extension - chrome.storage.local.get 限制

file-upload - 我将如何限制 golang 中服务器的上传和下载速度?