问题:我有一个起始节点,我正在搜索具有某个属性的节点。但我只想要与最短节点连接的节点。
示例:绿色节点已设置属性,但我只想要“A”和“C”,因为“E”的路径较长
到目前为止我得到了什么:
LET source = (FOR x IN Entity FILTER x.objectID == @nodeId
return x)[0]
FOR node, edge, path IN 1..5 ANY source._id GRAPH 'm'
FILTER CONTAINS(node.label, @search)
LIMIT @limit
RETURN path
但这会返回所有内容而不是最短路径
答案 0 :(得分:0)
您可以使用LENGTH(path.edges)
获取原点节点的距离,因此如果您将遍历放入子查询中,您可以找到之后的最短路径长度,然后按该长度过滤:
LET allMatches = (
FOR node, edge, path IN 1..3 ANY "[vertex_id]" GRAPH "[my_graph]"
FILTER CONTAINS(node.label, @search)
LIMIT @limit
RETURN {node,path})
LET shortestPathLength = MIN(FOR m IN allMatches COLLECT len = LENGTH(m.edges) RETURN len)
FOR m IN allMatches
FILTER LENGTH(m.path.edges) == shortestPathLength
RETURN m.node
在一个查询中可能有更好的方法来执行此操作(例如,执行广度优先遍历然后以某种方式停止它)但我没有看到它。