neo4j -即使指定了skip和order by,分页也会返回相同结果

62o28rlo  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(153)

我实现了无限滚动,并尝试在用户每次到达页面底部时获取新条目。
问题是,neo4j返回已经返回节点
我读到ORDER BY是这种情况下必须的,但它没有帮助。
我试着按照这里的解决方案:How to paginate query results with cypher?,并将pagination clauses (LIMIT, SKIP...)放在WITH子句之前,但它不起作用。它还抛出了一个错误
查询:

MATCH(shops: Shop)
WHERE shops.title = ~ '(?i).*${search}.*'
WITH shops
ORDER BY shops.title asc
SKIP $skip
LIMIT $limit
MATCH(products: Product) < -[relation: SELL] - (shops)
RETURN shops, products, relation

查询如何保证每个请求都有新的项?

  • 注意--limit始终为12,而skip是items数组的长度,客户端app包含在请求中。
    编辑1 -来自复制数据库的图像

可以示出从两个查询返回具有相同ID的节点。

第一页-跳过0,限制12

第二页-跳过12页,限制12页

42fyovps

42fyovps1#

order by面对2个或更多具有相同值的节点时,Neo4j没有回退。我尝试将order bytitleTimer进行比较,发现有几个Shops与此title进行比较。解决方法是将回退添加到另一个比较中。
ORDER BY shops.title, shops.id
奇怪的是,neo4j不提供故障保护(例如,节点的ID),并且在使用skip时发送相同的节点。

相关问题