如何在 pymongo 中使用 find_one 获取最新记录

问题描述 投票:0回答:2

我有一个现有程序,我试图在 pymongo 中使用

aws_account_id
获取最后插入的文档,该文档与键
find_one
匹配。

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

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

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

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

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

提前致谢, 罗宾

python mongodb pymongo
2个回答
29
投票

sort
中使用
*args
find_one()

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

在这里使用

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

如果您还没有这样做,您可以

import pymongo
并使用
pymongo.DESCENDING
标记,或者只是
-1
来表示“降序”顺序。前者可能使代码更清晰。

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


0
投票

另一个解决方案:

report = securitydb.scout.find_one({'aws_account_id':aws_account.account_number},
                                   sort=[('$natural', -1)])
© www.soinside.com 2019 - 2024. All rights reserved.