javascript - MongoDB - 相当于 LEFT JOIN,其中一个集合不存在

标签 javascript mongodb mongodb-query aggregation-framework

是否有与 LEFT JOIN 查询等效的查询,其中 MongoDB 中不存在右集合?

SQL:

SELECT * FROM TableA as A LEFT JOIN TableB as B ON A.id = B.id 
WHERE B.Id IS NULL

MongoDB:???

P.S.:我的最初草图:

db.getCollection('collA').aggregate([
    {
      $lookup:
        {
          from: "collB",
          localField: "_id",
          foreignField: "_id",
          as: "collB"
        }           
   }
   //, {$match : collB is empty}
])

最佳答案

好吧,您的编辑基本上已经有了答案。只需$match,其中数组为空:

db.getCollection('collA').aggregate([
    { "$lookup": {
      "from": "collB",
      "localField": "_id",
      "foreignField": "_id",
      "as": "collB"
    }},
   { "$match": { "collB.0": { "$exists": false } } }
])

$exists0 数组索引进行测试是在查询中询问“这是一个包含项目的数组吗”的最有效方法。

关于javascript - MongoDB - 相当于 LEFT JOIN,其中一个集合不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44398842/

相关文章:

node.js - MongoClient native FindAndModify "Need update or remove"错误

javascript - 更改 React 组件的顺序仅在第二次单击后触发重新渲染

javascript - IE8 中的问题 : Jscript debugger. Breaking on JScript runtime error : permission denied

javascript - EJS 和 Mongoosse 中的 .forEach()

mongodb - 如何在 MongoDB 中按时间间隔聚合文档?

javascript - MongoDB 查询超过 30 秒的文档

node.js - MongoDB insertMany 并跳过重复项

javascript - 如何在导航单击按钮上保持打开 Firefox 扩展弹出窗口

javascript - 从公共(public)文件夹中的脚本运行index.js中的函数

mongodb - 根据 groupby、count 和 max createDate 查找所有记录