Neo4j嵌套查询

Neo4j嵌套查询,neo4j,cypher,Neo4j,Cypher,我正在使用这个密码检索一组库的嵌套数据,每一个库都有0-X数量的书籍,而每一本书都有0-X数量的作者。密码看起来像这样: MATCH (library:Library)--(book:Book)--(author:Author) WITH library, book, {name: author.name} AS nest_author WITH library, {name: book.name, authors: collect(nest_author)} AS nest_book WITH

我正在使用这个密码检索一组库的嵌套数据,每一个库都有0-X数量的书籍,而每一本书都有0-X数量的作者。密码看起来像这样:

MATCH (library:Library)--(book:Book)--(author:Author)
WITH library, book, {name: author.name} AS nest_author
WITH library, {name: book.name, authors: collect(nest_author)} AS nest_book
WITH {name: library.name, books: collect(nest_book)} AS nest_library
RETURN {library_data: collect(nest_library)}
这个密码唯一的问题是,只有当图书馆有一本书,一本书有一个作者时,它才起作用。我尝试了下面的查询,但结构丢失,所有作者显示在所有书籍下,所有书籍显示在所有库下:

MATCH (library:Library),(book:Book),(author:Author)
OPTIONAL MATCH (library)--(book)
OPTIONAL MATCH (book)--(author)

WITH library, book, {name: author.name} AS nest_author
WITH library, {name: book.name, authors: collect(nest_author)} AS nest_book
WITH {name: library.name, books: collect(nest_book)} AS nest_library
RETURN {library_data: collect(nest_library)}

如何编写第一个查询,以便在库中没有任何书籍或书籍不包含作者时,关系是可选的,而collect只返回一个空列表?

在第二个查询中,您正在创建跨产品行为

基于以下neo4j控制台示例:

此查询实现了以下功能:

MATCH (n:Library)
OPTIONAL MATCH (n)--(book:Book)
OPTIONAL MATCH (book)--(author:Author)
RETURN n.name, collect({ book: book.title, author: author.lastname })
示例结果如下所示:

n.name  collect({ book: book.title, author: author.lastname })
aspernatur  [ {book:"Eligendi fuga est harum est nobis nam id.", author:null},  {book:"Numquam animi ex alias rerum quas.", author:null}]
consectetur [ {book:"Vel nostrum modi officia.", author:null},  {book:"Dolorum dolor optio aut ipsum.", author:null},  {book:"Iste sit quo reprehenderit dolores neque.", author:null}]
corrupti    [ {book:"Minus sit sed quia tempora quaerat.", author:null}]
deserunt    [ {book:"Temporibus impedit quod aut vel et.", author:null},  {book:"Praesentium perspiciatis blanditiis et omnis suscipit nostrum repudiandae.", author:null}]
labore  [ {book:"Non quis maxime doloremque et.", author:null},  {book:"Eos voluptatem voluptatibus mollitia exercitationem nobis.", author:null},  {book:"Vel voluptatem quae libero non est eaque.", author:null},  {book:"Atque velit accusantium perspiciatis assumenda voluptas ea corporis.", author:null}]
nihil   [ {book:"Deleniti illo earum eaque sapiente perspiciatis omnis quia.", author:null},  {book:"Est eum enim quo suscipit et molestias.", author:null},  {book:"Consequuntur nam temporibus explicabo quia ipsum.", author:null},  {book:"Facilis ratione illum ipsum sed cum ut.", author:null},  {book:"Est eos quis suscipit ratione alias necessitatibus asperiores sunt.", author:null},  {book:"Odit voluptatem est reiciendis quod tempora.", author:null}]
officiis    [ {book:"Ad libero porro quibusdam voluptatum.", author:null},  {book:"Numquam omnis ut unde sequi sint enim.", author:null}]
omnis   [ {book:"Qui laboriosam alias repellendus quibusdam incidunt et.", author:null},  {book:"Eos officia vitae consequatur qui.", author:null},  {book:"Explicabo nemo eos maxime.", author:null},  {book:"Dolores voluptatum et similique natus dolore fuga perferendis molestiae.", author:null},  {book:"Quidem aut ut ut quas veritatis.", author:null},  {book:"In in quos et aspernatur dolores.", author:null},  {book:"Alias sed quasi explicabo possimus veniam temporibus.", author:null},  {book:"Omnis dolor eum molestiae veritatis.", author:null}]
tempore [ {book:null, author:null}]