Проблема, с которой вы столкнулись, заключается в том, что вы не можете объединить несколько видов (или, если на то пошло, лимиты) для объекта курсора;только последний вызов метода будет иметь какой-либо эффект. Мы можем продемонстрировать это с помощью следующего кода:
from pymongo import MongoClient, DESCENDING, ASCENDING
import datetime
db = MongoClient()['mydatabase']
db.testcollection.delete_many({})
for i in range (0, 1000):
db.testcollection.insert({'timestamp': datetime.datetime.now(), 'pin_code': i})
cursor = db.testcollection.find().sort([("timestamp", DESCENDING)]).limit(50)
cursor.limit(200)
cursor.limit(100)
cursor.limit(150)
print(len(list(cursor)))
Дает:
150
Итак, вам нужно использовать конвейер агрегации или что-то в этом роде с одной сортировкой /фильтровать, а затем использовать сортировку или сортировку по результатам:
from pymongo import MongoClient, DESCENDING
import datetime
db = MongoClient()['mydatabase']
db.testcollection.delete_many({})
for i in range (0, 1000):
db.testcollection.insert({'timestamp': datetime.datetime.now(), 'pin_code': i})
my_list = list(db.testcollection.find().sort([("timestamp", DESCENDING)]).limit(100))
my_list = sorted(my_list, key = lambda x: x['timestamp'], reverse=True)
my_list = sorted(my_list, key = lambda x: x['pin_code'])
for item in my_list:
print (item)