如何基于相同字段值连接MongoDB中的两个集合?
MongoDB 基于手机号关联两个集合的查询方法
你可以使用MongoDB聚合框架中的$lookup操作关联users与users_info集合,配合$match筛选指定手机号,最终整合出目标结构的结果。以下是具体实现:
完整查询语句
db.users.aggregate([ // 筛选出目标手机号的用户数据 { $match: { phone_number: "+9600000000000" // 替换为你要搜索的特定号码 } }, // 关联users_info集合,匹配相同手机号的记录 { $lookup: { from: "users_info", localField: "phone_number", foreignField: "phone_number", as: "user_extra_info" } }, // 将关联返回的数组展开为单个对象(因单手机号对应单条记录) { $unwind: "$user_extra_info" }, // 合并原文档与关联文档的字段 { $replaceRoot: { newRoot: { $mergeObjects: ["$$ROOT", "$user_extra_info"] } } }, // 移除临时生成的关联字段 { $project: { user_extra_info: 0 } } ])
返回结果示例
执行上述查询后,会得到你期望的结构:
{ "user_id": "1234", "phone_number": "+9600000000000", "name": "John Smith", "age": "45", "address": "DC" }
关键步骤说明
$match:精准定位目标手机号的用户记录,减少后续关联的数据量$lookup:建立两个集合的关联关系,通过phone_number字段匹配$unwind:将$lookup返回的数组结果展开为单个对象,方便字段合并$replaceRoot+$mergeObjects:把原用户数据和关联的附加信息合并为一个文档$project:清理临时生成的关联字段,让结果结构更简洁
内容的提问来源于stack exchange,提问作者Shwan
相关产品推荐
相关产品推荐

