我有一些:book
。书籍由ISBN
标识,并与相关图书有:similar
关系。这是我的密码查询,以获得与提供的ISBN列表相似的书籍:
MATCH (b:Book)-[:SIMILAR]-(c:Book)
WHERE b.ISBN in $ISBNs
return b, c
但是,我想将每本书的类似书籍数量限制为5本,而不限制总书数。换句话说,如果我提供一定的ISBN列表,我目前在一本书上有7个相似,在另一本书上有6个相似,而在一个书上有3个相似。我想限制为每本书5,所以我得到5,5和3.我怎么能这样做?
答案 0 :(得分:2)
将您的查询更改为:
MATCH (b:Book)-[:SIMILAR]-(c:Book)
WHERE b.ISBN in $ISBNs
RETURN {book:b, similars: collect(c)[..5]}
此查询使用collect()功能将所有类似的图书收集到列表中。它将返回一个带有book
键的投影,其中包含主要图书和similars
密钥,其中包含一系列限制为5本图书的类似图书。
答案 1 :(得分:1)
使用APOC程序,您可以限制每行匹配结果的数量,而不是将限制应用于总行。
请参阅此knowledge base article了解如何使用apoc.cypher.run()
实现此目的。
如果您不能使用APOC程序,您可以使用Bruno的答案,该答案占用了集合的有限部分。