pymongo sort和find_one问题

时间:2012-04-09 20:06:48

标签: python mongodb pymongo

我正在尝试使用键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)])

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

由于

4 个答案:

答案 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]