使用aggregate 加上 $sort $skip $limit
当$sort值相同时候 分页查询获取结果大量重复
要是不用aggregate 用find 分页 结果没有问题···
如何解决聚合时候数据重复的问题?
使用aggregate 加上 $sort $skip $limit
当$sort值相同时候 分页查询获取结果大量重复
要是不用aggregate 用find 分页 结果没有问题···
如何解决聚合时候数据重复的问题?
2 回答1.5k 阅读
1 回答1k 阅读✓ 已解决
1 回答967 阅读✓ 已解决
794 阅读
782 阅读
669 阅读
622 阅读
要这样理解,你给的排序条件是不充分的。数据库已经按照你的要求按
{count: -1}
完成了排序,但是因为它们的值都一样,不管谁放在前面谁放在后面其实都没有违反你的要求,因为你的要求只是count的降序而已。从数据库的角度来讲,既然你没有额外的要求,那当然是以最高效的方式给你结果,也就是不管count以外的顺序,因为这样最省资源。那么何为最高效?这里涉及一些数据库底层的知识。在单机上,如果没有索引支持,数据库会尝试遍历所有数据,然后做一个内存排序来给你结果,从节省资源的角度,显然这个排序只排到满足了count降序为止,其他字段可以说是先到先得。这就造成在count相同时,其他顺序是随机的。它们可能受到:
暂时想到这些。总之,你不指定,数据库不保证。
至于解决方案也已经很明了了,指定一个可以完全确定顺序的排序条件,比如:
但是需要理解,这样会让数据库付出额外的努力来保证第二个排序条件的正确性,在实际使用场景中你要根据实际情况判断这是不是真的对你有意义。
最后说句无关的话,以后提问的时候建议尽可能用文本贴出相关的代码和结果,而不是截图。因为截图虽然方便了你自己,别人在回答问题的时候如果想用你的代码或者数据做实验那就相当麻烦。没有耐心的人可能直接忽略你的问题,对你寻找答案也不是件好事。