关于python:pymongo sort and find_one问题

pymongo sort and find_one issue

我正在尝试使用键position对名为user_score的集合进行排序,并获得结果的第一个文档。 在这种情况下,集合user_score不存在,我希望将结果作为None,但是我又得到了一个游标。

1。
结果=

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

现在,我更改了查询,如下所示,没有得到任何预期的结果。

2。
结果=

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

我的第一个查询有什么问题?

谢谢


在第一个查询中,当您应该传递两个参数("position", pymongo.DESCENDING)时,您在sort函数中传递了一个参数("position,pymongo.DESCENDING")

请务必注意引号。


我的回应有点晚了,但似乎当前版本的PyMongo确实支持对find_one调用的排序操作。

从此处的文档页面(请grep查找find_one的部分):

All arguments to find() are also valid arguments for find_one(),
although any limit argument will be ignored. Returns a single
document, or None if no matching document is found.

用法示例如下:

1
2
filterdict = {'email' : '[email protected]'}
collection.find_one(filterdict, sort=[('lastseen', 1)])

希望这对更多的搜索者有所帮助!


这是find上的默认mongodb行为。 每当使用find时,您都会获得结果列表(在这种情况下为可迭代的游标)。 如果查询没有匹配项,则仅findOne-或等效于PyMongo的find_one将返回None


使用列表将光标的值转换为字典:

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