如何使用 $lookup MongoDB 进行左连接

Kri*_*hna 5 sql mongodb

我创建了下面的视图。我想让所有客户都在 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 ]},""]}
            }
        }
       ]
)}
Run Code Online (Sandbox Code Playgroud)

Kri*_*hna 6

将查询重新编写为

 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",""]}
            }
        }
       ]
)}
Run Code Online (Sandbox Code Playgroud)