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

如何查询Supplier集合中存在于Toys集合内的供应商记录

筛选Toys集合中存在的Supplier数据

方案一:聚合管道关联查询

通过$lookup关联Toys集合,再过滤出有匹配结果的供应商:

db.Supplier.aggregate([
  // 关联Toys集合,匹配供应商ID
  {
    $lookup: {
      from: "Toys",
      localField: "SupplierId",
      foreignField: "Supplier.SupplierId",
      as: "toyMatches"
    }
  },
  // 只保留有匹配记录的供应商
  {
    $match: {
      toyMatches: { $ne: [] }
    }
  },
  // 移除临时生成的toyMatches字段,返回原始供应商数据
  {
    $project: {
      toyMatches: 0
    }
  }
])

方案二:先提取ID再匹配

先从Toys集合中提取所有出现过的供应商ID,再用$in筛选Supplier集合:

// 提取Toys中所有不重复的供应商ID
const validSupplierIds = db.Toys.distinct("Supplier.SupplierId");

// 查询符合条件的供应商
db.Supplier.find({
  SupplierId: { $in: validSupplierIds }
})

方案对比

  • 方案一:一步完成查询,无需额外变量,适合直接执行聚合操作的场景。
  • 方案二:分两步执行,若Supplier.SupplierId和Supplier.SupplierId都有索引,数据量大时查询效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:45:33