[英]Get results of request with sort and limit using pymongo
讓我們以2個文檔作為這個簡單的集合col
:
{
"_id" : ObjectId("5ca4bf475e7a8e4881ef9dd2"),
"timestamp" : 1551736800,
"score" : 10
}
{
"_id" : ObjectId("5ca4bf475e7a8e4881ef9dd3"),
"timestamp" : 1551737400,
"score" : 12
}
要訪問上一個時間戳(第二個文檔中的一個),我首先執行了此請求
a = db['col'].find({}).sort("_id", -1)
然后a[0]['timestamp']
但是由於此集合中將有很多文檔,我認為只請求帶有limit函數的最后一個文檔會更有效,例如
a = db['col'].find({}).sort("_id", -1).limit(1)
接着
for doc in a:
lastTimestamp = doc['timestamp']
因為只有一個,所以我可以在循環內聲明變量。
所以三個問題:
謝謝 ! Python 3.6 / Pymongo 3.7
如果在選擇條件中使用具有唯一索引的任何字段,則應使用find_one
方法,該方法將返回唯一與查詢匹配的文檔。
就是說, find
方法返回一個Cursor對象,並且不會將數據加載到內存中。
如果使用過濾器選項,則可能會獲得更好的性能。 您現在的查詢將進行集合掃描。
如果您不使用過濾器,並且想檢索最后一個文檔,那么干凈的方法是使用Python內置的next
函數。 您也可以使用next
方法。
cur = db["col"].find().sort({"_id": -1}).limit(1):
with cur:
doc = next(cur, None) # None when we have empty collection.
find()。sort()是如此之快,不必擔心速度,它是訪問游標第一個元素的最佳途徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.