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

Neo4j 返回cypher中每个变量的不同数量,neo4j,cypher,Neo4j,Cypher,我有一个类似的问题 MATCH (first:Book {ISBN: {ISBN}})-[:IN]-(category:BookCategory)-[:IN]-(books:Book) RETURN * 基本上,它通过参数中提供的ISBN获取一本书,找到它所在的类别,然后找到该类别中的其他书籍 我希望它只返回1:BookCategory,但不限该类别的书籍。例如,战争与和平属于经典和战争小说。运行这个关于战争与和平的查询将返回战争与和平、经典、战争小说以及这两个类别的所有书籍。我想取而代之的是

我有一个类似的问题

MATCH (first:Book {ISBN: {ISBN}})-[:IN]-(category:BookCategory)-[:IN]-(books:Book)
RETURN *
基本上,它通过参数中提供的ISBN获取一本书,找到它所在的类别,然后找到该类别中的其他书籍

我希望它只返回1:BookCategory,但不限该类别的书籍。例如,战争与和平属于经典和战争小说。运行这个关于战争与和平的查询将返回战争与和平、经典、战争小说以及这两个类别的所有书籍。我想取而代之的是归还所有经典或战争小说中的书,我不在乎是哪本,还有经典或战争小说本身。结果可能如下所示:

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

简言之,我想要一种方法来限制某些变量的数量,而不是其他变量。谢谢

您只需将查询限制在类别级别,然后继续:

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

谢谢这太棒了!但我怎样才能限制书的数量,比如说50本,以阻止10000本战争小说被发送给用户呢