在聚合框架mongodb中找到从一个机场到另一个机场的可能航班,最多有一个中间机场停机

Posted

技术标签:

【中文标题】在聚合框架mongodb中找到从一个机场到另一个机场的可能航班,最多有一个中间机场停机【英文标题】:find the possible flights going from one airport to another with at most one intermediate airport stoppage in aggregate framework mongodb 【发布时间】:2021-03-15 19:53:00 【问题描述】:

如何找到从“BAN”到“CHD”的所有可能航班,最多有一次中间机场停飞?

我基本上想获得一个数组的数组,该数组具有一个对象(直飞)或两个对象(连接的航班与一个中间机场停止)

数据集


    "_id" : ObjectId("5fc92425f356c05bdafe724a"),
    "to" : "CHD",
    "from" : "BAN"


    "_id" : ObjectId("5fc92425f356c05bdafe724b"),
    "to" : "CHD",
    "from" : "DEL"


    "_id" : ObjectId("5fc92425f356c05bdafe724d"),
    "to" : "DEL",
    "from" : "BAN"


    "_id" : ObjectId("5fc92425f356c05bdafe724e"),
    "to" : "CHD",
    "from" : "CHN"


    "_id" : ObjectId("5fc9245af356c05bdafe7251"),
    "to" : "BAN",
    "from" : "CHD"


OUTPUT REQUIRED

[ 
[
    "_id" : ObjectId("5fc92425f356c05bdafe724a"),
    "to" : "CHD",
    "from" : "BAN"
],
[
    "_id" : ObjectId("5fc92425f356c05bdafe724b"),
    "to" : "CHD",
    "from" : "DEL"
,

    "_id" : ObjectId("5fc92425f356c05bdafe724d"),
    "to" : "DEL",
    "from" : "BAN"
]
]

【问题讨论】:

【参考方案1】:

我相信这已经足够了,但请随时测试或标记任何错误:

db.collection.aggregate([

  "$graphLookup": 
    "from": "collection",
    "startWith": "$to",
    "connectFromField": "to",
    "connectToField": "from",
    "as": "flights",
    "maxDepth": 0,
    "restrictSearchWithMatch":  $or: [  from: "BAN" ,  to: "CHD"  ] 
,
   $match:  from: "BAN"  
])

Live


理念是我们需要的:

                      A ---> Anywhere
                     
                     Anywhere ---> B

始终抱着“Anywhere”,就是同一个地方。

    我们获取一个文档,如果 to 不是 B 或 from 不是 A,我们丢弃 如果 to 是 B 或 from 是 A,那么我们在 to:anywhere 和 from:anywhere 之间寻找完全匹配 我们需要删除以下路径:B-->anywhere; Anywhere-->A(反向路径),由 $match 完成

如果这很慢,值得尝试索引“来自”字段,如下所示:

db.nameOfDB.createIndex(from:1)

【讨论】:

以上是关于在聚合框架mongodb中找到从一个机场到另一个机场的可能航班,最多有一个中间机场停机的主要内容,如果未能解决你的问题,请参考以下文章

MongoDb 聚合基于 ids 过滤列表并将此过滤列表映射到另一个字段

MongoDB - 聚合查询

在 mongodb 聚合框架中展开字典值

从 MongoDB 聚合到 Spring Boot 聚合框架

在 MongoDB 聚合框架中计算中位数

使用多个字段在 MongoDB 聚合框架中按相关性排序