Neo4jRB:搜索所有关联?

时间:2015-04-13 23:24:23

标签: ruby neo4j neo4j.rb

考虑这个简单的设置:

class Person
  include Neo4j::ActiveNode

  property :name, type: String

  has_many :out, :follows, model_class: Person, rel_class: Friendship
  has_many :in, :followed_by, model_class: Person, rel_class: Friendship
end

class Friendship
  include Neo4j::ActiveRel

  property :key, type: String

  type 'friendship'
  from_class Person
  to_class Person
end

如何搜索符合条件的所有Friendship s? (例如,某个密钥的Friendship)。

在一封电子邮件中,Brian Underwood向我指出了这个片段:

ModelClass.association_name(:node_var, :rel_var).where("rel_var = 'some_condition'")

我试过玩它,但不明白。 ModelClassActiveNode还是ActiveRel个实例?什么是:node_var:rel_var

1 个答案:

答案 0 :(得分:2)

如果您想搜索具有特定key属性的每个友情,您可以这样做:

Person.all.follows.rel_where(key: your_key_var)
# OR
Person.all.follows(:f, :r).where('r.key = {key}').params(key: your_key_var)

这些都会产生MATCH (p:Person)-[r:friends]->(f:Person),或多或少,第一个例子使用自动定义的节点标识符,第二个例子使用f表示目标朋友节点,r表示关系,由:f, :r参数给出。在此之后,to_a会返回链接结束处的朋友,或者您可以使用pluck:f来回复:r以返回给定的对象。

model_class选项始终描述关联另一侧的NODE类。在Brian的示例中,node_varrel_var是Cypher将在其创建的语句中使用的标识符的通用名称。