Neo4j 是否使用Cypher查询将图形作为对象返回,其中每个父节点包含其子节点的数组?
我有一个类似下图的图表: 我必须使用什么密码查询将图形作为对象返回,其中每个父节点包含其子节点的数组? 例如:Neo4j 是否使用Cypher查询将图形作为对象返回,其中每个父节点包含其子节点的数组?,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我有一个类似下图的图表: 我必须使用什么密码查询将图形作为对象返回,其中每个父节点包含其子节点的数组? 例如: state: { name: 'New York' publishingCompanies: [ { name: 'Penguin' authors: [ { name: 'George Orwell', books: [ { name: 'Why I Write'
state: {
name: 'New York'
publishingCompanies: [
{
name: 'Penguin'
authors: [
{
name: 'George Orwell',
books: [
{ name: 'Why I Write'},
{ name: 'Animal Farm'},
{ name: '1984' }
]
},
{
name: 'Vladimir Nobokov'
books: [
{ name: 'Lolita' }
]
},
...
]
},
{
name: 'Random House',
authors: [
...
]
}
]
}
我试图使用
apoc.convert.toTree
,但它返回了一个从State
到Book
的路径数组,这应该返回State
对象(假设状态名是通过stateName
传入的):
更新了创建
书籍的子句
,以便元素匹配所需结果。
MATCH (s:State)
WHERE s.name = $stateName
OPTIONAL MATCH (s)-[:IS_STATE_OF]->(c)
OPTIONAL MATCH (c)-[:PUBLISHED_FOR]->(a)
OPTIONAL MATCH (a)-[:WROTE]->(b)
WITH s, c, a, CASE WHEN b IS NULL THEN [] ELSE COLLECT({name: b.name}) END AS books
WITH s, c, CASE WHEN a IS NULL THEN [] ELSE COLLECT({name: a.name, books: books}) END AS authors
WITH s, CASE WHEN c IS NULL THEN [] ELSE COLLECT({name: c.name, authors: authors}) END AS pcs
RETURN {name: s.name, publishingCompanies: pcs} AS state