在cypher中返回不同数量的每个变量

时间:2017-03-20 16:13:05

标签: neo4j cypher

我有一个像

这样的查询
MATCH (first:Book {ISBN: {ISBN}})-[:IN]-(category:BookCategory)-[:IN]-(books:Book)
RETURN *

基本上它通过其ISBN(在参数中提供)获得一本书,找到它所在的类别,并在该类别中找到其他书籍。

我希望它只返回1 :BookCategory,但在该类别中无限制的书籍。例如,战争与和平分类在 Classics 战争小说下。在战争与和平上运行此查询将返回战争与和平经典战争小说以及所有书籍两个类别。我希望返回 Classics 战争小说中的所有书籍(我不关心哪些)和 Classics < / em> 战争小说本身。结果可能如下:

==================================================
 first         | category | books                |
===============|==========|=======================
 War and Peace | Classics | Old Yeller           |
===============|==========|=======================
                          | Anne of Green Gables |
                          |=======================
                          |         ...          |

简而言之,我想要一种方法来limit一些变量但不是其他变量。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在类别级别限制查询,然后继续:

MATCH (first:Book {ISBN: {ISBN}})-[:IN]-(category:BookCategory)
WITH first, category
LIMIT 1 
MATCH (category)-[:IN]-(books:Book)
WHERE books <> first
RETURN first, category, collect(books) as books

将图书限制为50:

MATCH (first:Book {ISBN: {ISBN}})-[:IN]-(category:BookCategory)
WITH first, category
LIMIT 1 
MATCH (category)-[:IN]-(books:Book)
WHERE books <> first
RETURN first, category, collect(books)[0..50] as books