0

假设有2个模型:

class A
  include Neo4j::ActiveNode
    property :name, type: String
    has_many :in, :bs, type: :HAS_B
end

class B
  include Neo4j::ActiveNode
    property :name, type: String
end

以及以下节点和关系:

a1 <- b1
a2 <- b1
a3 <- b2
a1 <- b2

现在,我希望其中的所有节点label: A都与label: B.

我怎样才能通过neo4jrb实现呢?

用简单的英语,我想要“所有标记为 A 且与节点 b1 有关系的节点”(这可以扩展到多个节点,例如与节点 b1 和 b2 有关系的标签 A 的所有节点)

4

2 回答 2

0

我是这样做的:

A.as(:a).B.where(name: [b1])

在这里,对于多个b's,只需发送所有必需的数组b's

请注意,此查询给出了与数组中任何一个a's连接的所有内容,这符合我在这种情况下的要求。如果您想要提供与 all连接的所有内容的东西,这将行不通。但是,如果有人遇到此类查询,请将其发布在评论中,我会将其包含在此帖子中。b'sa's b's

于 2017-05-16T07:54:17.440 回答
0

您应该将:bs关联添加到class B.

class B
  include Neo4j::ActiveNode
    property :name, type: String
    has_many :out, :bs, type: :HAS_B, model_class: :A
end

然后,在找到特定节点 B 后,您可以简单地执行b.bs. 例如B.where(id: some_id).bs.

如果你想找到与节点 b1 或 b2 有关系的标签 A 的所有节点,你可以这样做

A.all.branch { bs.as(:b).where("b.uuid IN [$b1_id, $b2_id]") }.params(b1_id: b1_id, b2_id: b2_id)

如果你想找到与节点 b1 和 b2 有关系的标签 A 的所有节点,你可以这样做

A.all.branch { bs.where(id: b1_id) }.branch { bs.where(id: b2_id) }
于 2018-03-30T03:20:31.747 回答