You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合中如何将两条带条件的投影查询合并为一个

MongoDB合并聚合查询解决方案

完全可以将两条查询合并为单条实现相同效果,推荐使用MongoDB的$facet聚合阶段,它支持在同一次查询中并行执行多个独立的子聚合管道,无需两次请求数据库。

合并后的查询代码

Orders.aggregate([
  // 先过滤出只需要统计的两类配送订单,缩小后续处理数据集
  {
    $match: {
      shippingType: { $in: ["standardShipping", "expressShipping"] }
    }
  },
  // 并行执行两个子管道分别统计两类配送的商品数量
  {
    $facet: {
      // 子管道1:对应原标准配送查询逻辑
      standardShippingStats: [
        { $match: { shippingType: "standardShipping" } },
        { $project: { standardShippingCount: { $size: "$products" } } }
      ],
      // 子管道2:对应原加急配送查询逻辑
      expressShippingStats: [
        { $match: { shippingType: "expressShipping" } },
        { $project: { expressShippingCount: { $size: "$products" } } }
      ]
    }
  }
])

结果说明

查询返回的结果仅包含1条文档,两个字段分别对应原两次查询的返回结果:

  • standardShippingStats:和原第一条标准配送查询的返回结构完全一致
  • expressShippingStats:和原第二条加急配送查询的返回结构完全一致

如果你的实际需求是统计所有标准/加急配送的商品总数量,而非单个订单对应的商品数,可以在对应子管道的$project后新增$group阶段求和即可,示例如下:

// 统计标准配送总商品数示例,放在standardShippingStats子管道末尾
{ $group: { _id: null, totalStandardCount: { $sum: "$standardShippingCount" } } }

内容的提问来源于stack exchange,提问作者ertemishakk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:36:01