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

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

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

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

【问题讨论】:

  • 您的 _id 的数据类型是什么,是字符串、数字、对象还是 ObjectId。

标签: mongodb pymongo


【解决方案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()

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 2016-07-15
    • 2017-09-08
    • 2015-04-20
    • 2016-11-16
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多