Bac*_*ash 5 count neo4j cypher
我有一个包含数千个节点的 Neo4j 数据库。
我使用此查询来查找在所需字段内包含一些文本的节点:
MATCH (n:MYNODE)
WHERE n.myfield CONTAINS {textToSearch}
RETURN n
ORDER BY n.myfield ASC
LIMIT 50
Run Code Online (Sandbox Code Playgroud)
此查询有效,并返回 ordere by 的前 50 个结果n.myfield
。
假设有 340 个节点符合搜索条件:返回前 50 个节点。有没有办法也返回总数?我想要 50 个节点以及总数 (340) 以便显示。
我会像这样进行第二个查询:
MATCH (n:MYNODE)
WHERE n.myfield CONTAINS {textToSearch}
RETURN count(n)
Run Code Online (Sandbox Code Playgroud)
有没有办法避免第二次查询并将此结果包含在第一个查询中?Neo4j 应该在第一个查询中将它们限制为 50 之前找到所有 340 个节点,那么有没有办法在LIMIT
应用子句之前拦截节点计数并返回它呢?
像这样的事情怎么样?对结果进行排序并将其放入集合中。然后返回集合的大小以及集合中的前 50 项。
MATCH (n:MYNODE)
WHERE n.myfield CONTAINS {textToSearch}
WITH n
ORDER BY n.myfield
WITH COLLECT(n) as matched
RETURN size(matched), matched[..50]
Run Code Online (Sandbox Code Playgroud)