Node.js mongoDB、node JS和最短路径功能,有可用的选项吗?

Node.js mongoDB、node JS和最短路径功能,有可用的选项吗?,node.js,mongodb,shortest-path,Node.js,Mongodb,Shortest Path,在工作中,我们一直在维护一个基于节点JS+mongodb(Mongoose)的位置应用程序。我们所需要的地理定位功能非常简单,在MongoDB中已经可以使用($near、$geointen和$geocretse)。我们的主要问题是一个需求,我们需要使用“最短路径”功能来检查我们存储的一些位置之间的最佳路径 在互联网上查找和搜索,mongo似乎没有最短路径功能,一些文章建议处理第二个数据库来执行此任务(neo4j或postgis) 问题是,是否存在一种仅使用mongo和node实现最短路径功能的价

在工作中,我们一直在维护一个基于节点JS+mongodb(Mongoose)的位置应用程序。我们所需要的地理定位功能非常简单,在MongoDB中已经可以使用($near、$geointen和$geocretse)。我们的主要问题是一个需求,我们需要使用“最短路径”功能来检查我们存储的一些位置之间的最佳路径

在互联网上查找和搜索,mongo似乎没有最短路径功能,一些文章建议处理第二个数据库来执行此任务(neo4j或postgis)

问题是,是否存在一种仅使用mongo和node实现最短路径功能的价格合理的方法?或者,如果处理第二个数据库,最好的组合是什么

更新


最近,我在mongo DB 3.4中发现了$graphLookup特性,在mongo DB Europe 16 Meeting up会谈中讨论了如何有用地跟踪最短路径。这是目前实现我想要的功能的合适功能吗?

mongodb中没有执行最短路径计算的本机操作

如果您希望避免实现、维护和同步单独的图形数据存储的成本,并且如果图形的大小不太大,则可以将节点、边和权重(或距离)加载到内存中,并使用javascript执行最短路径计算

为了避免自己实现最短路径算法,可以使用以下库

根据node dijstra文档,您需要初始化为每条边提供权重的图形,然后调用
path
函数

const Graph = require('node-dijkstra')

const route = new Graph()

route.addNode('A', { B:1 })
route.addNode('B', { A:1, C:2, D: 4 })
route.addNode('C', { B:2, D:1 })
route.addNode('D', { C:1, B:4 })

route.path('A', 'D') // => [ 'A', 'B', 'C', 'D' ] 

多亏了cjungel,实际上这是一种可能的解决方案,主要问题是在许多情况下,节点数量可能非常大,仅将其加载到内存中,因为成千上万的用户可能会使用此功能。@dakairus在这种情况下,我认为您唯一的选择是在您的体系结构中引入一个新的数据存储。根据您的实时要求和数据量,您可以将图形定期导入neo4j或其他GraphStore。然后可以使用neo4j进行实时最短路径计算。如果您总是需要在计算中考虑最新数据,那么我认为您应该修改应用程序,使用neo4j存储和查询所有与图形相关的操作。