我在我的Django应用程序的AJAX分页聚合查询中使用 $ skip 和 $ limit 。以下是我的代码示例:
art_cursor = Articles.objects.aggregate({'match': {'ntype': {'$in': [1,6]}}},
{'$group': {'_id': {'title': '$title'}}},
{'$sort': {'_id.title': -1}},
{'$limit': 51 * page}, {'$skip': 51 * (page-1)},
allowDiskUse=True)
所以我有一些排序的文章池,并希望在用户向下滚动时为每个页面获取一个独特的部分。
但有些文章会在不同的网页上重复出现,这意味着如果我将代码放在范围(1,6)循环中(用于获取1到5页的所有文章) ),然后将重复结果数组中的一些文章。
可以为它做哪些解决方法,或者我可以用另一种方式做这样的事情?
UPD1 顺便说一句,如果我删除 $ sort 操作 - 结果数组中没有重复项。我不知道为什么
答案 0 :(得分:0)
好的,问题在于 $ sort + $ limit MongoDB优化。当我们在$ sort之后得到$ limit时,MongoDB优化器只排序我们在$ limit result中得到的对象。
来源(MongoDB文档):https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#agg-sort-limit-coalescence