2015-03-24 177 views
1

我正在使用此密碼來檢索一組庫的嵌套數據,每個庫都有0-X數量的書,每本書有0-X數量的作者。 Cypher支架看起來是這樣的:Neo4j嵌套查詢

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)} 

如何將我寫的第一個查詢,這樣的關係是可選當圖書館沒有任何書籍或圖書不包含作者時,收集只是返回一個空列表?

回答

2

在您的第二個查詢中,您正在創建交叉產品行爲。

主要基於以下Neo4j的控制檯例如:http://console.neo4j.org/r/l1cpwz

這個查詢做的伎倆:

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}]