Rails Neo4j查找与某个节点相关的所有节点

时间:2017-05-12 00:49:17

标签: ruby-on-rails neo4j neo4jrb

假设有两种型号:

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

以下节点和关系:

label: A

现在,我希望label: B的所有节点都与vafs<-read.table(text="Sample1 Sample2 Identity 1 2 chr11-50-T 3 4 chr11-200-A", header=T) vec <- c(50,100) vafs$vec<- sapply(vafs$Identity, FUN=function(x) ifelse(length(grep(pattern=paste(vec,collapse="|"), x))>0,1,0)) vafs$vec <- as.factor(vafs$vec) ggplot(vafs, aes(x=Sample1, y=Sample2, label=Identity, col=vec),alpha=0.5)+geom_point() 的特定节点相关。

如何通过neo4jrb实现这一目标?

简单地说,我想要&#34;标记为A的所有节点都与节点b1和#34有关; (这可以扩展到多个节点,就像标签A的所有节点都与节点b1和b2有关)

2 个答案:

答案 0 :(得分:0)

我就这样做了:

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

此处,对于多个b's,只需发送所有必需b's的数组。

请注意,此查询会为所有a's提供连接到 数组中b's的任何<{1}},这符合我的要求。如果您想要的内容能够提供与所有 a's相关联的所有b's,那么这一切都无法奏效。但是,如果有人遇到此类查询,请将其发布在评论中,我将在此帖中将其包含在内。

答案 1 :(得分: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) }