繁体   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