neo4j是否有可能限制收集的数据?

时间:2019-07-01 20:01:41

标签: node.js database neo4j cypher

我的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

1 个答案:

答案 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