gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:23:24 25 4
gpt4 key购买 nike

在以下查询中:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com