時間:2024-03-26 14:36作者:下載吧人氣:19
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還有聚合框架。當我們遇到需要復雜的查詢需求的時候,這些技術都可以派上用場,靈活的使用不同的技術,一定能幫助我們快速解決和處理問題。
網友評論