繁体   English   中英

Neo4j.rb分别查询和查询两种关系

[英]Neo4j.rb query in and out separately for both relationship

这是我的Neo4j模型

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

user1的输出为2,输入为1,如下所示

user1 ---> user2

user1 ---> user3

用户1 <-用户3

如果我像下面一样查询,则返回in / out

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`)" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM