0

0

mongodb怎么多表联查?

舞夢輝影

舞夢輝影

发布时间:2025-11-05 22:52:02

|

829人浏览过

|

来源于php中文网

原创

$lookup 可实现 MongoDB 多集合关联查询,通过 from、localField、foreignField 和 as 字段进行左外连接,如订单与用户集合关联后可用 $unwind 展开数组,支持复杂条件匹配与子查询,建议合理设计文档结构、适当冗余并建立索引以提升性能。

mongodb怎么多表联查?

MongoDB 虽然是文档数据库,不支持传统关系型数据库的 JOIN 操作,但可以通过 $lookup 聚合阶段实现类似“多表联查”的功能。这个功能从 3.2 版本开始引入,适用于集合之间的关联查询。

使用 $lookup 实现多表联查

$lookup 可以将一个集合的数据与另一个集合进行“左外连接”,基本语法如下:

{ $lookup: { from: "目标集合名", localField: "当前集合的字段", foreignField: "目标集合的字段", as: "输出的数组字段名" } }

例如,有两个集合:orders(订单)和 users(用户),想查出每个订单对应的用户信息:

orders 集合示例:

{ "_id": 1, "user_id": 123, "total": 200 }

users 集合示例:

{ "_id": 123, "name": "张三", "age": 30 }

执行聚合查询:

db.orders.aggregate([ { $lookup: { from: "users", localField: "user_id", foreignField: "_id", as: "user_info" } } ])

结果会把匹配的用户信息加入到 user_info 数组中:

{ "_id": 1, "user_id": 123, "total": 200, "user_info": [ { "_id": 123, "name": "张三", "age": 30 } ] }

关联后处理数组数据

如果确认关联结果是“一对一”,可以使用 $unwind 展开数组,去掉嵌套结构:

2088shop商城购物系统
2088shop商城购物系统

2088shop商城购物系统是商城系统中功能最全的一个版本:非会员购物、商品无限级分类、不限商品数量、商品多级会员定价、上货库存、Word在线编辑器、订单详情销售报表、商品评论、留言簿、管理员多级别、VIP积分、会员注册积分奖励、智能新闻发布、滚动公告、投票调查、背景图片颜色更换、店标上传、版权联系方式修改、背景音乐(好歌不断)、广告图片支持Flash、弹出浮动广告、搜索引擎关健词优化、图文友情联

下载
{ $unwind: "$user_info" }

这样 user_info 就变成对象而不是数组,便于后续使用。

更复杂的关联场景

除了简单的字段匹配,$lookup 还支持子查询形式的关联,比如:

  • 通过表达式匹配多个条件
  • 关联时添加过滤条件
  • 实现“一对多”或“多对多”查询

例如,只关联满足特定条件的用户:

{ $lookup: { from: "users", let: { uid: "$user_id" }, pipeline: [ { $match: { $expr: { $and: [{$eq: ["$_id", "$$uid"]}, {$gt: ["$age", 18}]} } } } ], as: "user_info" } }

性能与设计建议

MongoDB 更推荐通过合理设计文档结构来减少关联操作。常见做法包括:

  • 嵌入相关数据:如订单中直接保存用户姓名,避免频繁 join
  • 适当冗余:牺牲一点写入成本,提升读取效率
  • 索引优化:为 localField 和 foreignField 建立索引,提高 $lookup 性能

对于高并发、强一致性关联场景,仍需评估是否适合用 MongoDB。

基本上就这些。只要理解 $lookup 的机制,就能灵活实现多集合关联查询。实际使用中结合聚合管道其他阶段,功能非常强大。

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mongodb启动命令
mongodb启动命令

MongoDB 是一种开源的、基于文档的 NoSQL 数据库管理系统。本专题提供mongodb启动命令的文章,希望可以帮到大家。

252

2023.08.08

MongoDB删除数据的方法
MongoDB删除数据的方法

MongoDB删除数据的方法有删除集合中的文档、删除整个集合、删除数据库和删除指定字段等。本专题为大家提供MongoDB相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.09.19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

973

2023.11.02

mongodb有哪些应用领域
mongodb有哪些应用领域

mongodb 的应用领域涵盖广泛,包括内容管理系统、社交媒体、分析、移动应用、物联网、金融科技、医疗保健和广告技术等领域,因其灵活性、可扩展性和易用性而广受欢迎。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

336

2024.04.02

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

480

2024.04.02

mongodb安装失败如何彻底删除
mongodb安装失败如何彻底删除

彻底删除 mongodb 安装失败的步骤:1、停止和禁用 mongodb 服务;2、删除配置文件、数据目录和日志文件;3、删除 mongodb 二进制文件;4、卸载 mongodb 套件(如果通过软件包管理器安装);5、删除 mongodb 用户、组和目录;6、重启系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

372

2024.04.02

mongodb与mysql好用推荐
mongodb与mysql好用推荐

mongodb 适用于非结构化数据、高扩展性和灵活查询(如网站内容管理、社交媒体),而 mysql 适用于结构化数据、强数据一致性和联接查询(如电子商务、银行系统)。

372

2024.04.02

excel表格操作技巧大全 表格制作excel教程
excel表格操作技巧大全 表格制作excel教程

Excel表格操作的核心技巧在于 熟练使用快捷键、数据处理函数及视图工具,如Ctrl+C/V(复制粘贴)、Alt+=(自动求和)、条件格式、数据验证及数据透视表。掌握这些可大幅提升数据分析与办公效率,实现快速录入、查找、筛选和汇总。

0

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号