Neo4j 如何在两个节点之间只匹配一个关系
我使用的是neo4j图形数据库,它在Ruby on Rails中使用, 例如: 我在汤姆和杰瑞之间有三种关系,他们合作建造了三座房子,现在我只想匹配其中的一座;如何编写查询代码???Neo4j 如何在两个节点之间只匹配一个关系,neo4j,match,Neo4j,Match,我使用的是neo4j图形数据库,它在Ruby on Rails中使用, 例如: 我在汤姆和杰瑞之间有三种关系,他们合作建造了三座房子,现在我只想匹配其中的一座;如何编写查询代码??? 我尝试过:这是我的代码: Neo4j::Session .query("MATCH (s1:Scholar)<-[r:COOPERATE]-(s2:Scholar) WHERE s1.id = #{@scholar.id} RETURN DISTINCT r ") Neo4j:
我尝试过:这是我的代码:
Neo4j::Session
.query("MATCH (s1:Scholar)<-[r:COOPERATE]-(s2:Scholar) WHERE s1.id = #{@scholar.id} RETURN DISTINCT r ")
Neo4j::会话
.query(“MATCH(s1:Scholar)为每个相关节点仅获取一个关系:
MATCH (s1:Scholar)<-[r:COOPERATE]-(s2:Scholar) WHERE s1.id = {s1_id} RETURN s2, collect(r)[0] AS r
id是一个参数,我只想在2个节点之间找到1个且只有1个关系,我可以找到结果,但2个节点之间的关系太多,而且它们的关系是协同的,我只需要1我想我理解了,我已经更新了答案。这行得通吗?你需要包括s2,因为Neo4j会自动按非aggr分组egate列在RETURN
或WITH
中工作,非常感谢,但我不知道为什么必须在RETURN中添加s2??当我在return4j中删除s2时,它不起作用。与SQL不同,NEO4J没有分组依据
。在这种情况下,收集
是一个聚合函数,因此它会自动按其他列分组在RETURN
(在本例中,它只是s2
)中。如果您想通过不返回s2
值来加快速度,您可以用结束s2,将(r)[0]作为r返回r
session.query("MATCH (s1:Scholar)<-[r:COOPERATE]-(s2:Scholar) WHERE s1.id = {s1_id} RETURN s2, collect(r)[0]", s1_id: @scholar.id).map(&:r)
session.query
.match('(s1:Scholar)<-[r:COOPERATE]-(s2:Scholar)')
.where(s1: {id: @scholar.id})
.return('s2, collect(r)[0] AS r')
.map(&:r)
class Scholar
include Neo4j::ActiveNode
id_property :id
has_many :in, :cooporates_with, type: :COOPERATE, model_class: :Scholar
end
Scholar.find(@scholar.id).cooporates_with(:s2, :r).return('s2, collect(r)[0] AS r').map(&:r)