如何解决使用 Neo4j 将子树节点收集为单独的列表
我正在尝试创建一个 cypher,它收集子树节点(这些子树节点属于 Story 类型)并将它们作为单独的列表返回。每棵树都从一个家庭节点开始,连接到用户节点,然后依次连接到故事节点。
澄清一下,有多个树,我试图收集所有的 Story 节点,结构如下:
{
FamilyOne: Stories:[...],FamilyTwo: Stories:[...]
}
Here is what the database structure looks like
解决方法
这样的事情应该可以工作:
MATCH (f:Family)
CALL {
WITH f
MATCH (f)<-[*]-(s:Story)
RETURN f,collect(DISTINCT s) as Stories
}
RETURN f.name as family,Stories
尽管这样可以让你每行一个家庭(我不知道你的财产是什么,所以我猜),以及每个家庭的故事。
如果你想要一个以姓氏为键的地图结构,那么你需要APOC程序:
MATCH (f:Family)
CALL {
WITH f
MATCH (f)<-[*]-(s:Story)
WITH f,collect(DISTINCT s) as Stories
RETURN [f.name,f {Stories}] as familyInfo
}
WITH collect(familyInfo) as familyData
RETURN apoc.map.fromPairs(familyData) as results
另一种方法是尝试 APOC 路径扩展器来获取故事:
MATCH (f:Family)
CALL {
WITH f
CALL apoc.path.subgraphNodes(f,{labelFilter:'/Story',relationshipFilter:'<'}) YIELD node as s
WITH f,collect(s) as Stories
RETURN [f.name,f {Stories}] as familyInfo
}
WITH collect(familyInfo) as familyData
RETURN apoc.map.fromPairs(familyData) as results
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。