sql - 如何使用 $lookup MongoDB 进行 LEFT JOIN

标签 sql mongodb

我创建了以下 View 。如果不是我仍然想要 orderheader 文档,我想让所有客户都使用 addresstype billing。我认为匹配阶段正在消除少数文件,因为少数文件没有地址类型计费。

我的意思是它的行为类似于 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 ]},""]}
            }
        }
       ]
)}

最佳答案

重新编写查询为

 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",""]}
            }
        }
       ]
)}

关于sql - 如何使用 $lookup MongoDB 进行 LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48453331/

相关文章:

sql - 如何用 CSV 数据更新 SQL 表?

mysql - 如何将开始日期和结束日期与其他开始日期和结束日期分开?

php - Ajax聊天系统-使用查询从表中选择两次

sql - 如何抑制从 SQL Server 中的另一个存储过程调用的存储过程的 SELECT 输出?

sql - 尝试确定特定零件号的下一个机器操作是什么

mongodb - 如何修复geojson以满足mongodb 2dsphere索引的需求

javascript - 如何在 Loopback 中将模型 ID 设置为字符串?

javascript - 无法在 MongoDB 拼接服务中搜索 ObjectID

java - MongoDB - Spring Data 获取仅包含请求字段的文档(不多也不少)

MongoDB:在一个查询中使用 $geoIntersects 或 $geoWithin 和 $near