MongoDB基于首次筛选结果二次筛选的实现方案咨询
解决方案
方法一:分步查询(简单直观)
先获取目标用户的邮编,再用该邮编筛选所有匹配的记录:
// 1. 拿到目标用户的邮编 const targetZip = db.yourCollection.findOne({ name: "Ross" }).zipcode; // 2. 查询所有同邮编的记录 db.yourCollection.find({ zipcode: targetZip });
把yourCollection替换成你的实际集合名称即可。
方法二:聚合管道(单次请求完成)
通过聚合自关联实现一次查询得到结果:
db.yourCollection.aggregate([ // 筛选目标用户,提取其邮编 { $match: { name: "Ross" } }, // 将邮编存入数组,用于后续关联匹配 { $group: { _id: null, targetZipList: { $addToSet: "$zipcode" } } }, // 自关联当前集合,匹配所有邮编在目标列表中的文档 { $lookup: { from: "yourCollection", localField: "targetZipList", foreignField: "zipcode", as: "sameZipRecords" } }, // 展开匹配结果数组 { $unwind: "$sameZipRecords" }, // 将匹配的文档作为根文档输出 { $replaceRoot: { newRoot: "$sameZipRecords" } } ])
两种方法都能得到你期望的输出,分步查询更易理解和调试,聚合管道适合需要单次数据库请求完成的场景。
内容的提问来源于stack exchange,提问作者Rajkumar Somasundaram
相关产品推荐
相关产品推荐

