Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何在两个节点之间只匹配一个关系_Neo4j_Match - Fatal编程技术网

Neo4j 如何在两个节点之间只匹配一个关系

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图形数据库,它在Ruby on Rails中使用, 例如: 我在汤姆和杰瑞之间有三种关系,他们合作建造了三座房子,现在我只想匹配其中的一座;如何编写查询代码???
我尝试过:这是我的代码:

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)