簡體   English   中英

pymongo 排序和 find_one 問題

[英]pymongo sort and find_one issue

我正在嘗試使用鍵position對名為user_score的集合進行排序,並獲取結果的第一個文檔。 在這種情況下,集合user_score不存在,我希望得到None的結果,但我得到了 cursor 回來。

1.結果=

db.user_score.find({'score':'$lt':score}}).sort("position,pymongo.DESCENDING").limit(1)

現在我像下面這樣更改了我的查詢,但沒有得到預期的任何結果。

2.結果=

db.user_score.find_one({'score':{'$lt':score}}, sort=[("position", pymongo.DESCENDING)])

我的第一個查詢有什么問題?

謝謝

我的回復有點晚,但似乎當前版本的 PyMongo 確實支持對 find_one 調用的排序操作。

這里的文檔頁面(請 grep find_one 部分):

find() 的所有 arguments 對 find_one() 也是有效的 arguments,盡管任何限制參數都將被忽略。 返回單個文檔,如果找不到匹配的文檔,則返回 None。

示例用法如下:

filterdict = {'email' : 'this.is@me.com'}
collection.find_one(filterdict, sort=[('lastseen', 1)])

希望這有助於更多最近的搜索者!

在您的第一個查詢中,在排序 function 中,您傳遞一個參數("position,pymongo.DESCENDING") ,而您應該傳遞兩個 arguments ("position", pymongo.DESCENDING)

一定要注意你的引號。

這是查找時的默認 mongodb 行為。 每當你使用find時,你都會得到一個結果列表(在本例中是一個可迭代游標)。 如果查詢沒有匹配項,只有findOne - 或者它是 PyMongo 等效的find_one將返回None

使用列表將 cursor 的值轉換為字典:

list(db.user_score.find({'score':'$lt':score}}).sort("position",pymongo.DESCENDING).limit(1))[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM