如何查询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
相关产品推荐
相关产品推荐

