Neo4jRB:搜索所有关联?
Neo4jRB: Searching through all associations?
考虑这个简单的设置:
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
中搜索符合条件的人? (例如某个键的 Friendship
s)。
在一封电子邮件中,Brian Underwood 向我指出了这个片段:
ModelClass.association_name(:node_var, :rel_var).where("rel_var = 'some_condition'")
我试过玩弄它,但不明白。 ModelClass
是 ActiveNode
还是 ActiveRel
实例?什么是 :node_var
和 :rel_var
?
如果您想搜索每个具有特定 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
作为目标 Friend 节点,r
:f, :r
参数给出的关系。之后,to_a
将 return 链末端的朋友,或者您可以用 :f
或 :r
调用 pluck
到 return给定的对象。
model_class
选项总是描述关联另一端的节点 class。在 Brian 的示例中,node_var
和 rel_var
是 Cypher 将在其创建的语句中使用的标识符的通用名称。
考虑这个简单的设置:
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
中搜索符合条件的人? (例如某个键的 Friendship
s)。
在一封电子邮件中,Brian Underwood 向我指出了这个片段:
ModelClass.association_name(:node_var, :rel_var).where("rel_var = 'some_condition'")
我试过玩弄它,但不明白。 ModelClass
是 ActiveNode
还是 ActiveRel
实例?什么是 :node_var
和 :rel_var
?
如果您想搜索每个具有特定 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
作为目标 Friend 节点,r
:f, :r
参数给出的关系。之后,to_a
将 return 链末端的朋友,或者您可以用 :f
或 :r
调用 pluck
到 return给定的对象。
model_class
选项总是描述关联另一端的节点 class。在 Brian 的示例中,node_var
和 rel_var
是 Cypher 将在其创建的语句中使用的标识符的通用名称。