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 排序错误的主要内容,如果未能解决你的问题,请参考以下文章