cypher分页总结果计数

时间:2015-03-10 20:05:32

标签: pagination cypher

我有一个密码查询的怪异,我需要对其结果进行分页。我想要做的是在限制完成之前获得结果总数。

以下是我的测试图:http://console.neo4j.org/?id=6hq9tj

我尝试在查询的所有部分使用 count(o),但我总是得到相同的结果:' total_count:1 '。就像在这里:http://console.neo4j.org/?id=konr7。我想要获得的结果应该是:' total_count:6 '。

我总是可以创建另一个查询来计算结果,但执行两个查询没有任何意义。

请任何人帮我一个吗?谢谢!

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

MATCH (o:Brand)
WITH o
ORDER BY o.name 
WITH collect({uuid:o.uuid, name:o.name}) AS brands, COUNT(distinct o.uuid) AS total
UNWIND brands AS brand_row
WITH total, brand_row
SKIP 5
LIMIT 5
RETURN COLLECT(brand_row) AS brands, total;
  

注意:这是未经测试的,类似的东西对我有用。此外,不确定它是多么高效。

答案 1 :(得分:0)

我实现此功能的唯一方法是将查询定义两次,我不确定这对性能有何影响,我猜或希望它是第一次缓存。请注意:这不是一个真正的解决方案,因为我在上面对问题的评论表明,如果你使用超出范围的偏移量,则不会返回任何内容!

// first query to get results
MATCH (o:Brand)
WITH o
ORDER BY o.name SKIP 5 LIMIT 5
WITH collect({uuid:o.uuid, name:o.name}) AS brands
// then query again to get count
MATCH (x:Brand)
WITH brands, count(*) as total
RETURN {total:total, brands:brands}

如果有人想出更好的解决方案,我也很乐意看到它,花了足够的时间试图让它正常工作。

稍微好一点的解决方案可以处理超出范围的偏移......

class Tag(models.Model):
        tag_word = models.CharField(max_length=35)
        slug = models.CharField(max_length=250)

        def __unicode__(self):
        return self.word

Class Place(models.Model):
    place_name = models.CharField(max_length=200)
    ...
    tag_word = models.ManyToManyField(Tag)

但它仍有两个问题,并且不是原始问题的有效答案

相关问题