如何解决Neo4j 从图中获取嵌套对象数组的响应
我是 neo4j 和 cypher 的新手,在使用“WITH”和“收集”分组查询时遇到问题,
所以我有这张图,如下图所示:
我想要的是这样的回复:
processes:[
{
node,subprocesses:[
{node,events: [
{node}
]
},{ //
}
]
},{
node,{ //
}
]
}
]
我目前的要求:
match (n:Group)-[r:DID_PROCESS]->(n2:Process)
optional match (n2)-[r2:SUB_PROCESS]->(n3:Process)
optional match (n3)-[he:HAS_EVENT]->(e:Event)
where id(n)=21 with n,[n2,type(r2),n3,[type(he),e]] as rela
return {group: n,tree:collect(rela)}
我希望我对问题的解释清楚,在此先感谢!!
解决方法
给定下图:
CREATE (g:Group {id: 21})
CREATE (p1:Process {id: 1})
CREATE (p2:Process {id: 2})
CREATE (p3:Process {id: 3})
CREATE (p4:Process {id: 4})
CREATE (e:Event {id: 1})
CREATE (g)-[:DID_PROCESS]->(p1)
CREATE (g)-[:DID_PROCESS]->(p2)
CREATE (p1)-[:SUB_PROCESS]->(p3)
CREATE (p1)-[:SUB_PROCESS]->(p4)
CREATE (p4)-[:HAS_EVENT]->(e)
并使用模式理解(https://neo4j.com/docs/cypher-manual/current/syntax/lists/#cypher-pattern-comprehension):
检索组及其进程:
MATCH (g:Group {id: 21})
RETURN {
processes: [(g)-[:DID_PROCESS]->(process) | process{.*}]
}
---
{
"processes": [
{
"id": 2
},{
"id": 1
}
]
}
以相同的方式扩展,使进程包含其子进程:
MATCH (g:Group {id: 21})
RETURN {
processes: [(g)-[:DID_PROCESS]->(process) |
{
node: process{.*},subprocesses: [(process)-[:SUB_PROCESS]->(sub) | sub{.*}]
}
]
}
---
{
"processes": [
{
"node": {
"id": 2
},"subprocesses": []
},{
"node": {
"id": 1
},"subprocesses": [
{
"id": 4
},{
"id": 3
}
]
}
]
}
最后,将其扩展为子进程以检索其事件:
MATCH (g:Group {id: 21})
RETURN {
processes: [(g)-[:DID_PROCESS]->(process) |
{
node: process{.*},subprocesses: [(process)-[:SUB_PROCESS]->(sub) |
{node: sub{.*},events: [(sub)-[:HAS_EVENT]->(event) | event{.*}]}
]
}
]
}
---
{
"processes": [
{
"node": {
"id": 2
},"subprocesses": [
{
"node": {
"id": 4
},"events": [
{
"id": 1
}
]
},{
"node": {
"id": 3
},"events": []
}
]
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。