MongoDb LEFT Присоединение возвращает данные, не такие, как MySQl Left JOIN - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть две таблицы MongoDB

Приложение Tabel

{
  "_id": {
    "$oid": "5cbac9172d962331401d0e48"
  },
  "appInstallCount": {
    "$numberInt": "6"
  },
  "status": {
    "$numberInt": "1"
  },
  "appName": "PC Access Log",
  "appInfo": "You can view users who access your PC",
  "appImageUrl": "assets/images/app/userlog-app-thismypc.png",
  "userID": "5c3d6a25227a1d01eba0afc9",
  "version": "1",
  "released_date": {
    "$date": {
      "$numberLong": "1555745047247"
    }
  },
  "lastUpdate_date": {
    "$date": {
      "$numberLong": "1555745047247"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}{
  "_id": {
    "$oid": "5cbd300316e4651c78167478"
  },
  "appInstallCount": {
    "$numberInt": "0"
  },
  "status": {
    "$numberInt": "1"
  },
  "appName": "PC Access Log TEST",
  "appInfo": "You can view users who access your PC",
  "appImageUrl": "assets/images/app/userlog-app-thismypc.png",
  "userID": "5c3d6a25227a1d01eba0afc9",
  "version": "1",
  "released_date": {
    "$date": {
      "$numberLong": "1555745047247"
    }
  },
  "lastUpdate_date": {
    "$date": {
      "$numberLong": "1555745047247"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}

и UserAndApps Tabel

{
  "_id": {
    "$oid": "5cbd327294877a70b510c8b6"
  },
  "status": {
    "$numberInt": "1"
  },
  "userID": {
    "$oid": "5cbd2d3e0afcb16efa795563"
  },
  "appID": {
    "$oid": "5cbac9172d962331401d0e48"
  },
  "date": {
    "$date": {
      "$numberLong": "1555903090765"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}{
  "_id": {
    "$oid": "5cbd327394877a70b510c8b7"
  },
  "status": {
    "$numberInt": "1"
  },
  "userID": {
    "$oid": "5cbd2d3e0afcb16efa795563"
  },
  "appID": {
    "$oid": "5cbd300316e4651c78167478"
  },
  "date": {
    "$date": {
      "$numberLong": "1555903091265"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}{
  "_id": {
    "$oid": "5cbd329a94877a70b510c8b9"
  },
  "status": {
    "$numberInt": "1"
  },
  "userID": {
    "$oid": "5c3d6a25227a1d01eba0afc9"
  },
  "appID": {
    "$oid": "5cbac9172d962331401d0e48"
  },
  "date": {
    "$date": {
      "$numberLong": "1555903130918"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}{
  "_id": {
    "$oid": "5cbd329b94877a70b510c8ba"
  },
  "status": {
    "$numberInt": "1"
  },
  "userID": {
    "$oid": "5c3d6a25227a1d01eba0afc9"
  },
  "appID": {
    "$oid": "5cbd300316e4651c78167478"
  },
  "date": {
    "$date": {
      "$numberLong": "1555903131796"
    }
  },
  "__v": {
    "$numberInt": "0"
  }
}

Iиспользуйте этот код для объединения двух таблиц

[
  {
    '$lookup': {
      'from': 'userandapps', 
      'localField': '_id', 
      'foreignField': 'appID', 
      'as': 'appData'
    }
  }, {
    '$unwind': {
      'path': '$appData', 
      'preserveNullAndEmptyArrays': true
    }
  }, {
    '$match': {
      'appData.userID': new ObjectId('5cbd2d3e0afcb16efa795563')
    }
  }
]

enter image description here

Проблема в том, что он возвращает только заполненный массив appData , ноМне нужен массив appData , чтобы заполнить и очистить оба этапа, как в MYSQL LEFT JOIN.если 'appData.userID': new ObjectId('5cbd2d3e0afcb16efa795563') не принадлежит одному из документов.он также возвращается с пустым массивом appData.Я пробовал много способов, но у меня не было никакого способа решить это.Может кто-то помочь мне с этим?Большая помощь.

Я пытаюсь с этим кодом, и он возвращается пустым без каких-либо данных

    [{
    $lookup: {
        from: 'userandapps',
        localField: '_id',
        foreignField: 'appID',
        as: 'appData'
    }
}, {
    $unwind: {
        path: "$appData",
        preserveNullAndEmptyArrays: true

    }
}, {
    $match: {
        "$or": [{
            'appData.userID': ObjectId('5cbd2d3e0afcb16efa795563')
        }, {
            'appData': null
        }]
    }
}]
...