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