发现结果中的MongoDB $ skip + $ limit重复项

时间:2016-07-09 12:31:34

标签: python django mongodb mongoengine

我在我的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 操作 - 结果数组中没有重复项。我不知道为什么

1 个答案:

答案 0 :(得分:0)

好的,问题在于 $ sort + $ limit MongoDB优化。当我们在$ sort之后得到$ limit时,MongoDB优化器只排序我们在$ limit result中得到的对象。

来源(MongoDB文档):https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#agg-sort-limit-coalescence