密码以紧凑的字符串格式返回自引用关系的返回链?

时间:2018-11-29 17:13:44

标签: neo4j cypher

假设我具有自我参照关系:

(User)-[REPORTS_TO]->(User)

如何编写密码,以便为每个用户返回一个字符串,该字符串表示该用户的血统报告(在管理链中任意深度)?那就是:如果乔向简报告,而简向约翰报告,那么对于“乔”的匹配,我将得到一个字符串(定界符为“,”,但可以是任意值):

乔,简,约翰

对于简来说就是:

简,约翰

对约翰来说应该是

约翰

(也可以选择其中一个字段包含目标用户,而另一个字段包含沿袭报告)

1 个答案:

答案 0 :(得分:1)

为此,您可以返回链中人员姓名的集合:

MATCH path = (person:User)-[:REPORTS_TO*]->(top)
WHERE NOT (top)-[:REPORTS_TO]->()
RETURN person.name as name, [node in nodes(path) | node.name] as reportingChain

或使用terraform documentation将名称列表元素加入字符串:

MATCH path = (person:User)-[:REPORTS_TO*]->(top)
WHERE NOT (top)-[:REPORTS_TO]->()
WITH person.name as name, [node in nodes(path) | node.name] as reportingChain
RETURN name, apoc.text.join(reportingChain, ',') as reportingChainText