Cypher 返回节点总数以及有限集

问题描述 投票:0回答:3

是否可以在单个密码查询中提取有限的节点集和节点总数?

match (n:Molecule) with n, count(*) as nb limit 10 return {N: nb, nodes: collect(n)}

上面的查询正确返回节点,但返回 1 作为节点数。我当然明白为什么它返回 1,因为没有分组,但不知道如何纠正它。

neo4j cypher
3个回答
9
投票

以下查询返回全部行数的计数器(我猜这就是所需要的)。然后它再次匹配并限制您的搜索,但原始计数器仍然可用,因为它是通过

WITH
语句进行的。

MATCH 
    (n:Molecule)
WITH 
    count(*) AS cnt
MATCH 
    (n:Molecule)
WITH 
    n, cnt LIMIT 10
RETURN 
    { N: cnt, nodes:collect(n) } AS molecules

3
投票

这是替代解决方案:

match (n:Molecule) return {nodes: collect(n)[0..5], n: length(collect(n))}

30k 节点需要 84 ms,更短,但效率不如 wassgren 提出的上述方案。


0
投票

此解决方案将工作分为两部分:首先获取完整的行列表,执行WITH对它们进行计数并将它们收集到列表中,然后使用collect()执行分页的子查询。如果您需要引入有关结果中行的附加信息,请将其放在“WITH item”和“RETURNcollect(item)”之间,以便仅针对您要返回的页面上的项目完成此操作。

MATCH (n:MyLabel)
WITH collect(n) as collection,count(n) as cnt 
CALL{
    WITH collection
    UNWIND collection as item
    WITH item ORDER BY item.id DESC SKIP 10 LIMIT 5
    RETURN collect(item) as items
}
RETURN cnt, items
© www.soinside.com 2019 - 2024. All rights reserved.