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

MongoDB v3.2 无关联的两个不同集合如何合并输出指定嵌套结构

MongoDB 3.2 跨集合合并查询实现方案

可直接对cities集合执行以下聚合查询,完全兼容MongoDB 3.2版本语法,无需使用map-reduce:

db.cities.aggregate([
  // 合并所有城市到单个数组
  {
    $group: {
      _id: null,
      Cities: { $push: "$$ROOT" }
    }
  },
  // 新增临时字段硬编码国家为Turkey,用于关联时间集合
  {
    $project: {
      Cities: 1,
      country: { $literal: "Turkey" }
    }
  },
  // 关联dates集合获取土耳其对应时间
  {
    $lookup: {
      from: "dates",
      localField: "country",
      foreignField: "_id",
      as: "dateInfo"
    }
  },
  // 调整输出结构,符合要求
  {
    $project: {
      _id: { $literal: ObjectId() }, // 生成新的ObjectId作为最终文档_id
      Cities: 1,
      DateTime: { $arrayElemAt: [ "$dateInfo.dateTime", 0 ] }
    }
  }
])

逻辑说明

  • 第一步$group将cities集合所有文档聚合为单条记录,所有城市信息存入Cities数组,不会产生冗余的时间字段到城市子项内
  • 第二步通过$literal生成固定值Turkey的临时关联字段,不需要cities集合内置国家字段
  • 第三步$lookup等值匹配dates集合中_id = "Turkey"的记录,获取对应的时间数据
  • 第四步直接从关联结果数组中取出时间字段作为顶层属性,最终输出结构和要求完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:51:04