MongoDB - Equivalent of LEFT JOIN where one collection isn't exists

后端 未结 2 1361
南旧
南旧 2020-12-10 19:58

Is there an equivalent to LEFT JOIN query where right collection isn\'t exists in MongoDB?

SQL:

SELECT * FROM TableA as A LEFT JOIN TableB as B ON A         


        
相关标签:
2条回答
  • 2020-12-10 20:14

    Neil Lunn's solution is working, but I have another approach, because $lookup pipe does not support Shard collection in the "from" statement.

    So I used to use simple java script as follows. It's simple and easy to modify. But for performance you should have proper indexes!

    var mycursor = db.collA.find( {}, {_id: 0, myId:1} ) 
    
    mycursor.forEach( function (x){ 
        var out = db.collB.count( { yourId : x.myId } )
        if ( out > 0) {
            print('The id exists! ' + x.myId); //debugging only
    
            //put your other query in  here....
    
            }
    } )
    
    0 讨论(0)
  • 2020-12-10 20:27

    Well your edit basically has the answer. Simply $match where the array is empty:

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

    The $exists test on the array index of 0 is the most efficient way to ask in a query "is this an array with items in it".

    0 讨论(0)
提交回复
热议问题