我有一个现有程序,我试图在 pymongo 中使用
aws_account_id
获取最后插入的文档,该文档与键 find_one
匹配。
我正在使用这个查询来执行抓取:
report = securitydb.scout.find_one({'aws_account_id': aws_account.account_number})
但是这个查询返回了一个错误的文档。下图展示了预期结果和我得到的错误结果。
在图像中,两个文档具有相同的 aws_account_id,但最后插入红色文档。所以预期的结果是红色标记的文档,但它拉取了黄色标记的文档。
我不确定我是否需要使用排序或类似的东西。我得到了一些解决方案,但这些解决方案基于纯 mongo 查询。我需要用 pymongo 做这件事的帮助。
提前致谢, 罗宾
在
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
来表示“降序”顺序。前者可能使代码更清晰。
还要注意“有序字典”,因为“排序”的键顺序通常很重要,或者至少如果你想对多个键的组合进行排序。
另一个解决方案:
report = securitydb.scout.find_one({'aws_account_id':aws_account.account_number},
sort=[('$natural', -1)])