<p>问题是不能对cursor对象复合多个排序(或限制);只有最后一个方法调用才有任何效果。我们可以用以下代码来演示这一点:</p>
<pre><code>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)))
</code></pre>
<p>提供:</p>
<pre><code>150
</code></pre>
<p>因此,您需要做的是使用聚合管道或类似的方法,使用单个排序/过滤器,然后对结果使用sort或sorted:</p>
<pre><code>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)
</code></pre>