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

MongoDB如何将数组匹配项提升至顶层并返回对应查询结果

MongoDB聚合查询实现方案

你可以通过以下4步聚合管道实现需求:

  1. 先过滤包含目标sku的订单文档,降低后续计算量
  2. 拆分inventory数组为独立条目
  3. 筛选出sku匹配的条目
  4. 重构输出字段为你需要的格式

完整查询代码如下:

db.salesOrder.aggregate([
  // 第一步:过滤出inventory中至少有一个sku为i3的订单文档
  {
    $match: {
      "inventory.sku": "i3"
    }
  },
  // 第二步:拆分inventory数组,每个元素对应一条独立文档
  {
    $unwind: "$inventory"
  },
  // 第三步:筛选出拆分后sku为i3的条目
  {
    $match: {
      "inventory.sku": "i3"
    }
  },
  // 第四步:调整输出字段格式,得到你需要的结构
  {
    $project: {
      _id: 0,
      salesOrderRef: 1,
      customerRef: 1,
      sku: "$inventory.sku",
      quantity: "$inventory.quantity",
      priceEa: "$inventory.priceEa",
      discount: "$inventory.discount"
    }
  }
])

效果说明

  • 如果单个订单的inventory数组里有多个i3的条目,$unwind会把每个条目都拆成独立文档,后续筛选后会分别返回,完全符合你要求的多结果输出场景
  • 第一步的预过滤可以跳过没有目标sku的订单,大幅提升大数量集合下的查询效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:36:04