Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个密码查询中获取总计数和分页结果(neo4j)_Neo4j_Cypher - Fatal编程技术网

在一个密码查询中获取总计数和分页结果(neo4j)

在一个密码查询中获取总计数和分页结果(neo4j),neo4j,cypher,Neo4j,Cypher,我正在编写一个api来返回neo4j数据。对于我的例子,我得到了所有匹配的节点。 API接受userId、limit和offset,并返回与该条件匹配的数据列表 我找到了一个解决方案,但它已经很旧了。不确定这是否仍然是最好的方法 性能与触发两个单独的查询相同,至少在两次运行后,neo4j会缓存其中一个查询 Match(u:WorkstationUser {id: "alw:44807"})-[:HAS_ACCESS_TO]->(p) return distinct(p) skip 0 li

我正在编写一个api来返回neo4j数据。对于我的例子,我得到了所有匹配的节点。 API接受userId、limit和offset,并返回与该条件匹配的数据列表

我找到了一个解决方案,但它已经很旧了。不确定这是否仍然是最好的方法

性能与触发两个单独的查询相同,至少在两次运行后,neo4j会缓存其中一个查询

Match(u:WorkstationUser {id: "alw:44807"})-[:HAS_ACCESS_TO]->(p) return distinct(p) skip 0 limit 10 

Match(u:WorkstationUser {id: "alw:44807"})-[:HAS_ACCESS_TO]->(p) return count(distinct(p))
我希望结果是这样的

{
  items: [ {},  {}], # query 1
  total: 100,   # query 2
  limit: 10,  # can get from input
  skip: 0    # can get from input
}


这将在一定程度上取决于您需要从需要计数的节点获得多少信息,以及是否需要获得不同的结果

如果不需要不同的结果,并且不需要对另一端的关系或节点进行任何额外的过滤(不过滤节点的标签或属性),则可以使用模式的size(),该模式将使用节点上存在的关系的度信息,哪种方法更有效,因为您不必实际扩展关系:

MATCH (u:WorkstationUser {id: "alw:44807"})
WITH u, size((u)-[:HAS_ACCESS_TO]->(p)) as total
MATCH (u)-[:HAS_ACCESS_TO]->(p) 
RETURN p, total
SKIP 0 LIMIT 10 
但是,如果需要不同的结果,或者需要按标签或属性筛选节点,则必须展开所有结果以获得总数。如果没有太多的结果(数百万或数十亿),则可以收集不同的节点,获取集合的大小,然后展开结果和页面:

MATCH (:WorkstationUser {id: "alw:44807"})-[:HAS_ACCESS_TO]->(p)
WITH collect(DISTINCT p) as pList
WITH pList, size(pList) as total
UNWIND pList as p
RETURN p, total
SKIP 0 LIMIT 10 

如果仅仅因为跳过设置得太高而没有返回结果,则不会返回“总计”。有什么办法可以解决这个问题吗?我不知道。跳过可用的行之后,就没有行了,并且您已经丢失了沿途带来的所有变量(因为总数保留在行中)。