Neo4j.rb 分别查询这两种关系的进出



这是我的 Neo4j 模型

class User
 include Neo4j::ActiveNode
 has_many :both, :followers, type: :following, model_class: 'User'
end

用户 1 有 2 个输出和 1 个输入,如下所示

用户 1 ---> 用户 2

用户 1 ---> 用户 3

用户 1 <--- 用户 3

如果我像下面一样查询,它会返回输入/输出

user1.followers.count #returns 3

我想单独查询用户

我如何使用Neo4j.rb.做到这一点。

提前谢谢。

由于关联决定了如何编写匹配 Cypher,因此在调用该方法以更改其行为时无法重写该方法。解决方案是再创建两个关联。

class User
  include Neo4j::ActiveNode
  has_many :both, :followers, type: :following, model_class: 'User'
  has_many :out,  :following, type: :following, model_class: 'User'
  has_many :in,   :followed_by, type: :following, model_class: 'User'
  end
end
# Or, to make it feel more Ruby...
class User
  include Neo4j::ActiveNode
  [[:both, :followers], [:out, :following], [:in, :followed_by]].each do |dir, assoc|
    has_many dir, assoc, type: :following, model_class: 'User'
  end
end

2.2.0 :008 >   User.followers.to_cypher
 => "MATCH (node2:`User`), (result_followers:`User`), node2-[rel1:`following`]-(result_followers:`User`)" 
2.2.0 :009 > User.following.to_cypher
 => "MATCH (node2:`User`), (result_following:`User`), node2-[rel1:`following`]->(result_following:`User`)" 
2.2.0 :010 > User.followed_by.to_cypher
 => "MATCH (node2:`User`), (result_followed_by:`User`), node2<-[rel1:`following`]-(result_followed_by:`User`)" 

相关内容

  • 没有找到相关文章

最新更新