Pymongo 排序错误

Posted

技术标签:

【中文标题】Pymongo 排序错误【英文标题】:Pymongo sort error 【发布时间】:2014-03-01 11:42:07 【问题描述】:

我一直在尝试按 ObjectId 从 Pymongo 降序对 Mongo 集合中的文档进行排序,并使用此代码使用最后添加的记录

record = collection.find().sort('_id', -1).limit(1)

但是,我收到“预期字符缓冲区对象”错误。不知道这里发生了什么。 另外,如果有人能想到一个更好的方法来使用 Pymongo 从 mongo 集合中获取最后添加的记录,那将是很大的帮助。

【问题讨论】:

您的 _id 的数据类型是什么,是字符串、数字、对象还是 ObjectId。 【参考方案1】:
for item in collection.find().sort("_id", pymongo.DESCENDING).limit(1):
    # do something with your item.

【讨论】:

给出错误“find/rfind/index/rindex() 需要至少 1 个参数(给定 0)” 我不熟悉 Python、PyMongo 驱动程序及其详细信息。但是当我过去使用它时,这段代码运行良好。尝试使用find() 而不是find() 以避免此错误。 @Ivan.Srb 的 pymongo.DESCENDING 值为 -1。那不是问题。【参考方案2】:

此错误向我表明您的“集合”变量包含一个字符串,而不是 PyMongo 集合实例。我需要查看设置“集合”变量的代码,以了解您犯了什么错误。但让我们从头开始:

import pymongo
client = pymongo.MongoClient()
collection = client.db
cursor = collection.find().sort('_id', -1).limit(1)
record = cursor.next()

这将为您提供最近添加的文档,但并非总是最近最近添加的。 timestamp portion of an ObjectId 仅精确到一秒,并且由于它是在插入文档的客户端计算机上生成的,因此 ObjectId 会受到时钟偏差的影响。

当且仅当集合是capped,您可以可靠地获取最后一个文档,例如:

cursor = collection.find().sort('$natural', -1).limit(1)
record = cursor.next()

【讨论】:

以上是关于Pymongo 排序错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Mongodb/pymongo 中按字符串长度排序

在 Windows 上运行时出现 PyMongo 错误

为啥我的 PyMongo 查询中出现无效错误

Pymongo:使用 $setOnInsert 错误进行批量更新

pymongo实战

集合对象不是 PyMongo 的可调用错误