我试图找到数据库中某种类型的节点数,这些节点连接到另一种类型的多个其他节点。就我而言,它将节点连接到多个名称节点。我有一个有效的查询:
MATCH rels=(p:Place)-[c:Called]->(n:Name)
WITH p,count(n) as counts
WHERE counts > 1
RETURN p;`
然而,这仅返回场所节点,理想情况下我希望它返回所涉及的所有节点和边缘。我找到a question on returning variables from before the WITH,但如果我包含我已定义的任何其他变量,则查询不返回任何响应,即此查询不返回任何内容:
MATCH rels=(p:Place)-[c:Called]->(n:Name)
WITH p, count(n) as counts, rels
WHERE counts > 1
RETURN p;
我不知道如何在不更改查询结果的情况下返回我想要的信息。任何帮助将不胜感激
答案 0 :(得分:0)
试试这个:
MATCH (p:Place)-[c:Called]->(n:Name)
WHERE size((p)-[:Called]->(:Name)) > 1
WITH p,count(n) as counts, collect(n) AS names, collect(c) AS calls
RETURN p, names, calls, counts ORDER BY counts DESC;
此查询使用Cypher的collect()
函数为每个与Name节点具有超过Called关系的位置创建名称和被调用关系的列表。
答案 1 :(得分:0)
你的第二个查询没有返回任何内容的原因是因为它的WITH
子句指定为aggregation"分组键" p
和rels
。由于每个rels
路径只有一个n
值,counts
始终为1。
这样的事可能适合你:
MATCH path=(p:Place)-[:Called]->(:Name)
WITH p, COLLECT(path) as paths
WHERE SIZE(paths) > 1
RETURN p, paths;
返回每个匹配的Place
节点及其所有路径。