Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找到ArangoDB中节点数的交叉节点?_Arangodb - Fatal编程技术网

找到ArangoDB中节点数的交叉节点?

找到ArangoDB中节点数的交叉节点?,arangodb,Arangodb,我有许多节点通过其他类型的中间节点连接。如图所示,可以有多个中间节点。我需要找到给定数量节点的所有中间节点,并根据初始节点之间的链接数量对其进行排序。在我的示例中,给定A、B、C、D,它应该返回节点E(4个链接)和节点F(3个链接)。这可能吗?如果不是,可以使用多个请求来完成吗?我曾考虑使用最短路径函数,但它似乎只能找到同一集合中节点之间的路径? 非常好的问题,它挑战了我大脑的AQL部分;) 好消息:完全可以只使用一个查询,利用图\u公共\u邻居和一部分数学。 公共邻域将计算您选择的顶点中有多少

我有许多节点通过其他类型的中间节点连接。如图所示,可以有多个中间节点。我需要找到给定数量节点的所有中间节点,并根据初始节点之间的链接数量对其进行排序。在我的示例中,给定A、B、C、D,它应该返回节点E(4个链接)和节点F(3个链接)。这可能吗?如果不是,可以使用多个请求来完成吗?我曾考虑使用最短路径函数,但它似乎只能找到同一集合中节点之间的路径?
非常好的问题,它挑战了我大脑的AQL部分;) 好消息:完全可以只使用一个查询,利用
图\u公共\u邻居
和一部分数学。 公共邻域将计算您选择的顶点中有多少个交叉点是连接组件(考虑到顺序a-E-B不同于B-E-a),使用组合数学,我们最终得到了
a*(a-1)=c
许多组合,其中c被打断。我们使用p/q公式来确定a(集合中给定的连通顶点数)

如果顶点的
类型
编码在顶点对象的属性中 由此产生的AQL如下所示:


对于x英寸(
(
let nodes=[“nodes/A”、“nodes/B”、“nodes/C”、“nodes/D”]
图中n的公共邻居(“myGraph”、节点、节点)
对于f值(n)
对于s值(f)
对于s中的候选人
筛选候选项。类型==“交叉”
收集十字架=候选人。\输入计数器
返回{交叉:交叉,连接:0.5+SQRT(0.25+长度(计数器))}
)
)
排序x.DESC
返回x

如果将交叉放置在不同的集合中,并按集合名称进行过滤,查询甚至会变得更高效,我们不需要打开任何不属于交叉类型的顶点。

对于x英寸(
(
let nodes=[“nodes/A”、“nodes/B”、“nodes/C”、“nodes/D”]
对于图中n的公共邻域(“myGraph”),节点,
{“vertexCollectionRestriction”:“Crosss”},{“vertexCollectionRestriction”:“Crosss”})
对于f值(n)
对于s值(f)
对于s中的候选人
收集十字架=候选人。\输入计数器
返回{交叉:交叉,连接:0.5+SQRT(0.25+长度(计数器))}
)
)
排序x.DESC
返回x

这两个查询都将在数据集上生成结果:


[
{
“十字架”:“E”,
“联系”:4
},
{
“十字架”:“F”,
“联系”:3
}
]

哇,很酷的staph@mchacki非常感谢你。你能给我解释一下这部分吗?filter candidate.type==“cross”此“type”是节点或集合名称的属性吗?If属性如何重写您的示例以按集合名称筛选此“交叉点”?不客气;)在上面的解决方案中,
类型
是顶点的一个属性。如果将叉放在不同的集合中,则查询效率会更高(无需打开所有圆形文档就发现它们不是叉)。我更新了我的帖子,因为评论不允许很好的格式。