我正在尝试使用键user_score
对名为position
的集合进行排序,并获取结果的第一个文档。在这种情况下,集合user_score
不存在,我希望得到None
的结果,但我得到了一个光标。
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)])
我的第一个查询有什么问题?
由于
答案 0 :(得分:11)
在第一个查询中,在sort函数中传递一个参数("position,pymongo.DESCENDING")
,当你应该传递两个参数("position", pymongo.DESCENDING)
时。
请务必注意引号。
答案 1 :(得分:4)
我的回复有点晚了,但似乎当前版本的PyMongo支持对find_one调用进行sort操作。
从文档页面here(请查看find_one部分):
find()的所有参数也是find_one()的有效参数, 虽然任何限制参数都会被忽略。返回一个 如果没有找到匹配的文件,则为“文件”或“无”。
示例用法如下:
filterdict = {'email' : 'this.is@me.com'}
collection.find_one(filterdict, sort=[('lastseen', 1)])
希望这有助于更近期的搜索者!
答案 2 :(得分:2)
这是find上的默认mongodb行为。无论何时使用find
,都会得到结果列表(在本例中为可迭代游标)。如果查询没有匹配项,则只有findOne
- 或者它的PyMongo等效find_one
将返回None
。
答案 3 :(得分:-1)
使用list将光标的值转换为dict:
list(db.user_score.find({'score':'$lt':score}}).sort("position",pymongo.DESCENDING).limit(1))[0]