我对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。
答案 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上试用它