MongoDB联表查询用法实战 mongodb联表查询
MongoDB是当今最为流行的NoSQL数据库,它提供了一种联表查询(Join)的机制,可以满足复杂的查询需求。通过联表查询,可以把不同文档的数据关联起来,也就是实现了关系型数据库中Join类型操作的功能。
MongoDB的联表查询用法可以分成三种:lookup(用于前后指定字段名)、$lookup(支持管道操作符)和聚合框架-(Aggretaion Framework)。
首先,让我们来看一下lookup的用法,lookup特别适合于“一对一”和“一对多”的关系。假设我们有两个集合,一个是订单集合,一个是客户集合。订单集合中有存放客户ID,而客户集合中有客户姓名等信息。我们想要查询出每笔订单的客户姓名,就可以使用lookup实现联表查询。具体的查询语句如下:
db.orders.aggregate([
{
$lookup: {
from: ‘customers’,
localField: ‘cust_id’,
foreignField: ‘_id’,
as: ‘customer_info’
}
}
])
其次,很多人在查询的时候都会用到$lookup进行联表查询,这也是最常用的,因为它的使用起来更加灵活一些,可以支持管道操作符,让我们来看看$lookup的例子:
db.orders.aggregate([
{
‘$lookup’: {
from: ‘customers’,
‘let’: {‘cust_id’: ‘$cust_id’},
pipeline: [
{
‘$match’: {
‘$expr’: {
‘$eq’: [
‘$$cust_id’, ‘$_id’
]
}
}
}
],
as: ‘customer_info’
}
}
])
最后,我们还可以使用聚合框架实现联表查询操作,聚合框架允许我们在查询中使用较复杂的功能,可以把查询条件设置在管道内部(内嵌文档),可以分配结果集,也可以实现Lookup类型的联表查询。
db.job.aggregate([
{
$lookup: {
from: ‘user’,
let: { id: ‘$user_id’},
pipeline: [
{$match: {$expr: {$eq: [‘$_id’, ‘$$id’]}}},
{$project: {name: 1, _id: 0}}
],
as: ‘user_info’
}
},
{$project: {user_info: 1. _id: 0}}
])
以上就是MongoDB联表查询的三种用法,也就是lookup、$lookup还有聚合框架。当我们遇到需要复杂的查询需求的时候,这些技术都可以派上用场,灵活的使用不同的技术,一定能帮助我们快速解决和处理问题。