Neo4j rb 发现 2 个节点之间的连接
Neo4j rb finding connectivity between 2 nodes
我在 rails 应用程序中使用 neo4j.rb。
我已经从数据库中检索了两个节点 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)
我在 rails 应用程序中使用 neo4j.rb。
我已经从数据库中检索了两个节点 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)