微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Neo4j 将子树节点收集为单独的列表

如何解决使用 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 举报,一经查实,本站将立刻删除。