如何使用cypher neo4j where子句获取节点的所有关系,而不仅仅是匹配的位置

时间:2014-08-28 13:42:08

标签: neo4j where cypher

我有这个密码查询:

MATCH (p:Person)-->(s:Startup)
WHERE p.name =~ '(?i).*something.*' OR p.description =~ '(?i).*something.*' OR s.name =~ '(?i).*something.*'
RETURN DISTINCT p, collect(DISTINCT s)

返回:

+--------+------------+
|   p    | collect(s) |
+--------+------------+
|   1    |     1      |
+--------+------------+

我期待的地方:

+--------+------------+
|   p    | collect(s) |
+--------+------------+
|   1    |     1, 2   |
+--------+------------+

当有人搜索某个名称时,它会以符合此条件的方式返回所有匹配的人员和相关的初创公司,但我希望它能让所有匹配的人员返回给我,并始终返回两个节点之间的所有关系。

(即,如果我搜索一个创业公司名称,我希望结果是关系中的人员和创业公司的名单,而不仅仅是人和匹配的创业公司)

我希望我已经很好地解释了这个问题。

我希望在一次查询中得到结果。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找类似这样的内容,您可以在第一个查询中找到与您的查询相关的任何人,然后执行WITH并继续使用该人查询:

MATCH (p:Person)-->(s:Startup)
WHERE p.name =~ '(?i).*something.*' OR p.description =~ '(?i).*something.*' OR s.name =~ '(?i).*something.*'
WITH DISTINCT p
MATCH (p)-->(s:Startup)
RETURN DISTINCT p, collect(DISTINCT s)