Mongodb聚合管道阶段

Mongodb聚合管道阶段,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个聚合,比如4个阶段,匹配、查找、展开、项目,按照相同的顺序 假设来自匹配阶段的结果数据为null,即它不返回任何文档,那么聚合是否中断?或者它将空数据传递到下一个阶段并执行所有下一个阶段 如果它执行所有下一个阶段,那么当匹配查询的结果为空时,如何中断聚合 我这样问是为了尽量减少对数据库的查询。要回答您的问题,如果为空,它将执行阶段并返回空结果。如果它为null,则不需要打断它 MongoDB聚合管道由多个阶段组成。每个阶段都会在文档通过管道时对其进行转换 说明: db.orders.

我有一个聚合,比如4个阶段,匹配、查找、展开、项目,按照相同的顺序

假设来自匹配阶段的结果数据为null,即它不返回任何文档,那么聚合是否中断?或者它将空数据传递到下一个阶段并执行所有下一个阶段

如果它执行所有下一个阶段,那么当匹配查询的结果为空时,如何中断聚合


我这样问是为了尽量减少对数据库的查询。

要回答您的问题,如果为空,它将执行阶段并返回空结果。如果它为null,则不需要打断它

MongoDB聚合管道由多个阶段组成。每个阶段都会在文档通过管道时对其进行转换

说明:

db.orders.aggregate([
   { $match: { status: "A" } },
   { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
第一阶段:$match阶段按状态字段过滤文档,并将状态等于“A”的文档传递到下一阶段


第二阶段:$group阶段按cust_id字段对文档进行分组,以计算每个唯一cust_id的金额总和。

我现在了解到,无论该阶段的结果如何,下一阶段都将执行。我的问题是,假设在匹配阶段没有返回任何文档,那么我可以中断聚合的下一阶段。看看如果我打破阶段,那么对数据库的查询数量将最小化,因此我可以这样做吗?我不认为你可以打破它之间。假设有三个管道,一个是匹配管道,另外两个是组管道。Match返回10个文档。第一组尝试对10个文档中没有的字段x进行分组。其他人尝试在这10个文档中的字段y上分组。所以第一组返回空,第二组执行操作。希望你能理解。人们会期望一个阶段在一个空的结果集上执行得非常快。不用担心。是的,我确信下面的答案很有帮助