是否可以在单个密码查询中提取有限的节点集和节点总数?
match (n:Molecule) with n, count(*) as nb limit 10 return {N: nb, nodes: collect(n)}
上面的查询正确返回节点,但返回 1 作为节点数。我当然明白为什么它返回 1,因为没有分组,但不知道如何纠正它。
以下查询返回全部行数的计数器(我猜这就是所需要的)。然后它再次匹配并限制您的搜索,但原始计数器仍然可用,因为它是通过
WITH
语句进行的。
MATCH
(n:Molecule)
WITH
count(*) AS cnt
MATCH
(n:Molecule)
WITH
n, cnt LIMIT 10
RETURN
{ N: cnt, nodes:collect(n) } AS molecules
这是替代解决方案:
match (n:Molecule) return {nodes: collect(n)[0..5], n: length(collect(n))}
30k 节点需要 84 ms,更短,但效率不如 wassgren 提出的上述方案。
此解决方案将工作分为两部分:首先获取完整的行列表,执行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