【问题标题】:Converting SQL Query to Mongo Aggregation将 SQL 查询转换为 Mongo 聚合
【发布时间】:2019-02-07 12:45:02
【问题描述】:

我对 mongodb 非常陌生,因此我广泛使用 SQL,我想尝试对 mongo 做同样的事情,就像我对 SQL 查询所做的那样。

我有 2 个收藏:

航班 属性: ID(字符串) 已验证(字符串) 有效(字符串)

使命 属性: ID(字符串) 航班(航班数组)

我需要根据如下所示的 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 中存在的所有 FLIGHTS 的 VALID 和 VERIFIED

【问题讨论】:

  • 你能展示这两个集合的样本数据吗

标签: sql database mongodb


【解决方案1】:

你可以在下面使用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

【讨论】:

  • 您好,谢谢您的回答。但我似乎收到了这个错误pymongo.errors.OperationFailure: arguments to $lookup must be strings, let: { flightIds: "$flights" } is type object。为什么会发生这种情况?
  • 请将您的 mongoDB 版本 3.4 更新到 3.6 或更高版本。谢谢。
猜你喜欢
  • 2021-06-19
  • 2017-08-29
  • 2021-09-03
  • 2023-03-11
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
相关资源
最近更新 更多