Neo4j rb发现2个节点之间的连接



我使用neo4j。

我已经从数据库中检索到两个节点n1和n2。

现在我需要检查它们之间是否有路径,我正在考虑使用Neo4j::Session.query使用密码查询

但是因为我已经有两个节点,我不想在查询中再次检索它们,(它是否影响性能?)有办法做到这一点吗?

我知道我可以使用query1 = n1.query_as(:node1)并使用它作为节点标识符,但我如何在相同的查询对象中引入n2,以便我可以检查它们之间的连接

我想要一些等价于查询

的东西
RETURN 
  CASE 
    WHEN node1-[*..6]-node2  
    THEN 'Connected within 6 nodes'  
    ELSE 'Not connected within 6' 
  END

我已经有了node1和node2。

是这样做的一种方法,也可以在不使用CYPHER DSL的情况下完成?

给你!

n1.query_as(:n1).match_nodes(n2: n2).match('n1-[*1..6]-n2').count

如果你想避免Cypher DSL,我认为你可以通过关联来做到这一点。作为遍历一级关系的初始示例,您可以这样做:

class N1Class
  include Neo4j::ActiveNode
  has_many :out, :test_association, type: :TEST_ASSOCIATION, model_class: :N2Class
end
n1.test_association.include?(n2)

这将测试它们是否通过test_association关联直接连接。您甚至可以为type指定false以忽略方向,为model_class指定false以忽略目标标签。

要获取可变长度,可以这样做:

n1.test_association(nil, nil, rel_length: 1..6).include?(n2)

相关内容

  • 没有找到相关文章

最新更新