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

MongoDB多查询合并:获取A集合独有的文档编号

合并后的MongoDB聚合查询方案

直接给你合并后的完整聚合查询,同时拆解每个阶段的作用:

db.receptions.aggregate([
  // 1. 先筛选集合A(receptions)中符合条件的文档
  {
    $match: {
      // 替换为你的实际日期筛选区间
      createTime: {
        $gte: ISODate("2024-01-01T00:00:00Z"),
        $lte: ISODate("2024-01-31T23:59:59Z")
      },
      // 替换为你的实际UUID范围条件
      uuid: {
        $gte: "uuid-start-value",
        $lte: "uuid-end-value"
      }
    }
  },
  // 2. 关联集合B(replyacusexmlblobs),同时完成B的条件筛选
  {
    $lookup: {
      from: "replyacusexmlblobs",
      let: { receptionUuid: "$uuid" }, // 传递A的UUID到关联管道
      pipeline: [
        {
          $match: {
            $expr: { $eq: ["$uuid", "$$receptionUuid"] }, // 匹配A、B的UUID
            // B的日期筛选条件,和A保持一致或按实际需求调整
            createTime: {
              $gte: ISODate("2024-01-01T00:00:00Z"),
              $lte: ISODate("2024-01-31T23:59:59Z")
            },
            // B的EventResponse筛选条件,替换为你的实际规则
            EventResponse: { $exists: true, $ne: "" }
          }
        },
        { $project: { _id: 0, uuid: 1 } } // 只保留必要字段,减少数据量
      ],
      as: "matchedB"
    }
  },
  // 3. 筛选出仅存在于A、B中无匹配的文档
  {
    $match: {
      matchedB: { $size: 0 }
    }
  },
  // 4. 只输出需要的文档编号字段
  {
    $project: {
      _id: 0,
      documentNumber: "$uuid" // 替换为你实际的文档编号字段名
    }
  }
])

关键逻辑说明

  • 用带管道的$lookup替代普通关联,直接在关联阶段完成集合B的所有筛选,避免后续处理冗余数据。
  • 通过判断matchedB数组长度为0,精准定位“仅存在于A”的文档,比$exists更直观可靠。
  • 所有筛选条件都前置,最大程度减少聚合过程中处理的数据量,提升查询效率。

内容的提问来源于stack exchange,提问作者MANUEL ALBERTO COY BENAVIDES

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:31