假设我具有自我参照关系:
(User)-[REPORTS_TO]->(User)
如何编写密码,以便为每个用户返回一个字符串,该字符串表示该用户的血统报告(在管理链中任意深度)?那就是:如果乔向简报告,而简向约翰报告,那么对于“乔”的匹配,我将得到一个字符串(定界符为“,”,但可以是任意值):
乔,简,约翰
对于简来说就是:
简,约翰
对约翰来说应该是
约翰
(也可以选择其中一个字段包含目标用户,而另一个字段包含沿袭报告)
答案 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