将 SQL 查询转换为 Mongo 聚合
Posted
技术标签:
【中文标题】将 SQL 查询转换为 Mongo 聚合【英文标题】:Converting SQL Query to Mongo Aggregation 【发布时间】: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
【问题讨论】:
你能展示这两个集合的样本数据吗 【参考方案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 或更高版本。谢谢。以上是关于将 SQL 查询转换为 Mongo 聚合的主要内容,如果未能解决你的问题,请参考以下文章
使用ROW_NUMBER()将复杂的DB2 SQL转换为mongo查询
将 spark 数据帧聚合转换为 SQL 查询; window、groupby 的问题,以及如何聚合?
markdown Mongo DB Query将字符串转换为日期,然后按日期聚合。