我正在编写一个密码,以便使用此密码获得每个类别5个产品的输出:
MATCH (s:Supplier)-[:POST]->(p:Product)-[:BELONG_TO]->(c:Category)
WITH *
MATCH r = (c)<-[:BELONG_TO*0..5]-(p)
WITH c, collect(tail(nodes(r))) AS allCatProducts
RETURN c, reduce(outputProducts=allCatProducts[..0] , catProduct IN allCatProducts | outputProducts + catProduct)[..5];
但是,这个密码的性能非常差。我有什么不对吗?
另外,我试图理解这部分:
[:BELONG_TO*0..5]
和
(catProduct)[..5]
非常感谢任何帮助。
答案 0 :(得分:3)
您似乎使查询过于复杂,此查询应该完成这项工作:
MATCH (s:Supplier)-[:POST]->(p:Product)-[:BELONG_TO]->(c:Category)
RETURN c.name, collect(p)[..5] as products
关于你的其他问题:
(x)-[r:BELONG_TO*0..5]->(y)
是可变长度路径查询,但在此您应该知道,如果找不到y
节点,则x
将返回为y
http://neo4j.com/docs/stable/query-match.html#_relationships_in_depth
(collection)[..5]
告诉我只返回集合的前5个元素,集合就像Java中的List
或者php中的array
。