在Neo4j WITH语句中包含变量查询输出

时间:2016-08-01 20:41:25

标签: neo4j cypher

我试图找到数据库中某种类型的节点数,这些节点连接到另一种类型的多个其他节点。就我而言,它将节点连接到多个名称节点。我有一个有效的查询:

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;

我不知道如何在不更改查询结果的情况下返回我想要的信息。任何帮助将不胜感激

2 个答案:

答案 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"分组键" prels。由于每个rels路径只有一个n值,counts始终为1。

这样的事可能适合你:

MATCH path=(p:Place)-[:Called]->(:Name) 
WITH p, COLLECT(path) as paths 
WHERE SIZE(paths) > 1 
RETURN p, paths;

返回每个匹配的Place节点及其所有路径。