Aggregate的 $lookup 和 $match ,可用于MangoDB的聯(lián)表
直接上代碼
兩個表介紹
- services表
number: 服務(wù)號碼
flow: 流程名稱 - flows表
name: 流程名稱
config: 流程配置
services表 和 flows 表,通過flow和name關(guān)聯(lián)。
聯(lián)表查詢
想實現(xiàn)查詢services表時,關(guān)聯(lián)查詢出引用的flow的詳細(xì)配置,方便前臺展示
用的aggrgete的Pipeline參數(shù)如下
[
{
'$lookup': {
'from': 'flows',
'localField': 'flow',
'foreignField': 'name',
'as': 'flow_detail'
}
}
]
帶上過濾
想實現(xiàn)查詢services表的指定service,關(guān)聯(lián)查詢出引用的flow的詳細(xì)配置,方便前臺展示
用的aggrgete的Pipeline參數(shù)如下
[
{
'$lookup': {
'from': 'flows',
'localField': 'flow',
'foreignField': 'name',
'as': 'flow_content'
}
}, {
'$match': {
'number': '6666'
}
}
]
基于egg-mongo-native編碼
最后基于上述pipeline參數(shù)實現(xiàn)編碼如下
let args = {
pipeline: [
{
'$lookup': {
'from': 'flows',
'localField': 'flow',
'foreignField': 'name',
'as': 'flow_content'
}
}, {
'$match': {
'number': '6666'
}
}
]
}
const result = await this.app.mongo.get('database').aggregate('services', args)
console.log(result)