2017-06-14 59 views
1

节点列表中传出的关系,我有一些:book秒。书籍由ISBN确定,并且与相关书籍有:similar关系。这里是我的暗号查询得到类似的书籍的ISBN提供的列表:Cypher支架获得限于量

MATCH (b:Book)-[:SIMILAR]-(c:Book) 
WHERE b.ISBN in $ISBNs 
return b, c 

不过,我想每本书同类书籍数量限制为5,不限制总的书籍。换句话说,如果我提供一定的ISBN列表,我现在在一本书上得到了7个相似的内容,另外一个上了6个,另一个上了3个。我想限制为5本书,所以我得到了5,5和3.我该怎么做?

回答

2

查询更改为:

MATCH (b:Book)-[:SIMILAR]-(c:Book) 
WHERE b.ISBN in $ISBNs 
RETURN {book:b, similars: collect(c)[..5]} 

此查询使用collect()功能,所有的同类书籍中收集到一个列表。它会返回一个投影与包含主簿和包含的限制为5本书同类书籍集合的similarsbook关键。

1

随着APOC程序可以限制每行的匹配结果的数量,而不是施加限制总行。

看看这个knowledge base article如何与apoc.cypher.run()实现这一目标。

如果您不能使用APOC程序,您可以用布鲁诺的答案,这需要收集的有限切片。