我的neo4j db中有两种类型的节点:用户和帖子。用户将帖子与-[:OWNER]->相关 我的目的是通过具有其帖子的ID来查询用户,并且帖子应受到限制(例如LIMIT 10)。是否可以使用COLLECT方法限制它们并按某些参数排序?
MATCH (c:Challenge)<-[:OWNER]-(u:User)
WHERE u.id IN ["c5db0d7b-55c2-4d6d-ade2-2265adee7327", "87e15e39-10c6-4c8d-934a-01bc4a1b0d06"]
RETURN u, COLLECT(c) as challenges
答案 0 :(得分:1)
您可以使用切片符号表示您只想使用集合的前10个元素:
MATCH (c:Challenge)<-[:OWNER]-(u:User)
WHERE u.id IN ["c5db0d7b-55c2-4d6d-ade2-2265adee7327", "87e15e39-10c6-4c8d-934a-01bc4a1b0d06"]
RETURN u, COLLECT(c)[..10] as challenges
或者您可以使用APOC的聚合功能:
MATCH (c:Challenge)<-[:OWNER]-(u:User)
WHERE u.id IN ["c5db0d7b-55c2-4d6d-ade2-2265adee7327", "87e15e39-10c6-4c8d-934a-01bc4a1b0d06"]
RETURN u, apoc.agg.slice(c, 0, 10) as challenges
APOC方法应该更有效,但是先尝试一下,然后看看哪种方法最适合您。
编辑
就排序而言,必须在聚合之前进行,因此对需要的内容使用WITH,对任何内容进行ORDER BY,然后执行聚合。
如果看不到好的结果,我们可能需要使用LIMIT,但是由于我们希望按u
而不是所有行使用,因此您需要在{{1 }}子查询(这是根据apoc.cypher.run()
执行的独立查询,因此我们可以使用LIMIT进行这种使用):
u