如何使用 $lookup MongoDB 进行 LEFT JOIN
Posted
技术标签:
【中文标题】如何使用 $lookup MongoDB 进行 LEFT JOIN【英文标题】:How to make a LEFT JOIN using $lookup MongoDB 【发布时间】:2018-01-25 23:03:56 【问题描述】:我创建了下面的视图。如果不是,我想让所有客户都使用地址类型计费的 orderheader,我仍然想要 orderheader 文档。我认为匹配阶段正在消除少量文档,因为没有针对少数文档的地址类型计费。
我的意思是它的行为类似于 INNER JOIN,而不是我想要 LEFT JOIN。努力,但我得到的只是 INNER JOIN。
db.createView(
"VWOrderHeader",
"OrderHeader",
[
$lookup:
from:"AddressDoc",
as: "Address",
localField: "CustomerNo",
foreignField: "CustomerNo"
,
$match: "Address.AddressType":/Billing/i
,
$project:
_id:0,
CustomerNo :"$CustomerNo",
ContactName: $ifNull:[$arrayElemAt: [ "$Address.ContactName",0 ],""]
]
)
【问题讨论】:
【参考方案1】:将查询重写为
db.createView(
"VWOrderHeader",
"OrderHeader",
[
$lookup:
from:"AddressDoc",
as: "Address",
localField: "CustomerNo",
foreignField: "CustomerNo"
,
$unwind: path: "$Address", preserveNullAndEmptyArrays: true ,
$match: $or:[ "Address.AddressType":/billing/i,"Address.AddressType":"","Address.AddressType":null]
,
$project:
_id:0,
CustomerNo :"$CustomerNo",
ContactName: $ifNull:[ "$Address.ContactName",""]
]
)
【讨论】:
以上是关于如何使用 $lookup MongoDB 进行 LEFT JOIN的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb 中使用 $lookup $let 变量?
如何使用 MongoDB 聚合 `$lookup` 作为 `findOne()`
如何在 mongodb 中使用 $lookup 加入多个集合
如何在 mongoDB 的第二级实现`lookup`? [复制]