首页 文章

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

提问于
浏览
1

我有这个密码查询:

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 回答

  • 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)
    

相关问题