将SQL查询转换为Mongo聚合

时间:2019-02-07 12:45:03

标签: sql database mongodb

我对mongodb并不陌生,因此与SQL进行了广泛的合作,我想尝试对mongo进行与SQL查询相同的操作。

我有2个收藏集:

航班 属性: ID(STRING) 已验证(STRING) 有效(STRING)

任务 属性: ID(STRING) 航班(航班阵列)

我需要根据一个SQL查询来检索数据(从理论上来说):

SELECT VERIFIED, VALID 
FROM FLIGHT
WHERE FLIGHT.ID IN
 ( SELECT FLIGHTS
FROM MISSION
WHERE MISSION.ID = "somestring"
AND
FLIGHT.ID = MISSION.FLIGHTS)

集合中文档的示例:

飞行

{
  "_id": ObjectId("5c4ae5b6a2ac3bc9f2e1b943"),
  "verified": "true",
  "valid": "true"
}

任务

{
  "_id": ObjectId("5c5acdd8bbf999dc34d96de7"),
  "flights":[
      ObjectId("5c4ae5b6a2ac3bc9f2e1b943"),
      ObjectId("5c4ae5eea2ac3bc9f2e1b961")
      ]
 }

我对如何使用“ $ lookup”和“ $ unwind”感到非常困惑。

简单来说,我汇总的目的是:

我需要检索ID为“ somestring”的MISSION中存在的所有航班的VALID和VERIFIED。

1 个答案:

答案 0 :(得分:0)

您可以在Aggregation下方使用

db.mission.aggregate([
      {
        $match: { "_id": "Here is mission Object Id" }
      },
      {
        $lookup: {
          from: "flight",
          let: { flightIds: "$flights" },
          pipeline: [
           {
              $match: {
                $expr: { $in: [ "$_id", "$$flightIds" ]}
              }
            }
          ],
          as: "result"
        }
      }
    ])

您可以在Here上试用它