ruby-on-rails - Neo4j rb 查找 2 个节点之间的连接

标签 ruby-on-rails neo4j neo4j.rb

我在 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)

关于ruby-on-rails - Neo4j rb 查找 2 个节点之间的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33190960/

相关文章:

ruby-on-rails - 向您的团队询问您的主 key 并将其放入 heroku deploy 上的 ENV ["RAILS_MASTER_KEY"]

database - Titan 和 Neo4j 图数据库有什么区别?

ruby-on-rails - 我应该将 JRuby 还是 Ruby for Rails 与 Neo4j.rb 一起使用?

ruby-on-rails - rake 分贝 :seed is not working using neo4j gem

ruby-on-rails - 未定义的方法 `each' 为 "":String with update_attributes

ruby-on-rails - 如何在rails3 select中渲染图片

ruby-on-rails - Rails 3.1.10 中脚手架生成的 View 规范中缺少部分错误

graph - 如何在 Cypher 中使用关系索引

maven - 找不到父 : net. java :jvnet-parent for project: com. sun.jersey :jersey-project:pom:1. 9

ruby-on-rails - 在 puma fork 后使用 preload_app 重新连接 Neo4jrb 连接?