【问题标题】:How fetch latest records using find_one in pymongo如何在 pymongo 中使用 find_one 获取最新记录
【发布时间】:2018-09-27 00:04:21
【问题描述】:

我有一个现有程序,我试图在 pymongo 中使用 find_one 获取与键 aws_account_id 匹配的最后插入的文档。

我正在使用这个查询来执行获取:

report = securitydb.scout.find_one({'aws_account_id': aws_account.account_number})

但是这个查询返回了一个错误的文档。下图展示了预期的结果和我得到的错误结果。

在图像中,两个文档具有相同的 aws_account_id,但红色的文档最后插入。所以预期的结果是红色标记的文档,但它拉动了黄色标记的文档。

我不确定我是否需要使用排序或类似的东西。我得到了一些解决方案,但这些都是基于纯 mongo 查询。我需要 pymongo 的帮助。

提前致谢, 罗宾

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    *args 中为find_one() 使用sort

    report = securitydb.scout.find_one(
      {'aws_account_id': aws_account.account_number},
      sort=[( '_id', pymongo.DESCENDING )]
    )
    

    在这里使用_id,因为ObjectId 值总是会随着它们的添加而“增加”,但是只要它在DESCENDING 排序顺序,这意味着“最新”在结果的“顶部”。

    如果您还没有这样做,您可以import pymongo 并使用pymongo.DESCENDING 令牌,或者只使用-1 来指示“降序”顺序。前者可能使代码更清晰。

    还要注意“有序字典”,因为“排序”的键顺序通常很重要,或者至少如果您想对多个键的组合进行排序。

    【讨论】:

    • 太棒了!感谢您的详细回答。成功了!!
    • 有谁知道这个解决方案的时间复杂度相对于存储的文档数量有多好?换句话说,随着存储的文档数量的增加,这个解决方案会变慢多少?
    猜你喜欢
    • 2016-11-07
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多