我有一个现有的程序,我试图在pymongo中使用aws_account_id
获取与密钥find_one
匹配的最后一个插入文档。
我使用此查询执行提取:
report = securitydb.scout.find_one({'aws_account_id': aws_account.account_number})
但是这个查询返回了一个错误的文档。下图显示了我预期的结果和错误的结果。
在图像中,两个文档都具有相同的aws_account_id,但最后插入了红色文档。所以预期的结果是红色标记的文件,但是它会拉出黄色标记的文件。
我不确定是否需要使用排序或类似的东西。我得到了一些解决方案,但这些都是基于纯mongo查询。我需要帮助用pymongo做这件事。
先谢谢, 罗宾
答案 0 :(得分:8)
在sort
find_one()
*args
report = securitydb.scout.find_one(
{'aws_account_id': aws_account.account_number},
sort=[( '_id', pymongo.DESCENDING )]
)
在此使用_id
,因为ObjectId
值总是会增加"增加"因为他们被添加,但其他任何东西,如" date"这也表明"最新"只要它在DESCENDING
排序顺序中就可以使用,这意味着"最新的"在"顶部"结果。
您可import pymongo
如果您还没有这样做并使用pymongo.DESCENDING
令牌,或只是-1
来表示"降序"订购。前者可能会提供更清晰的代码。
还要注意"有序的字典"由于"排序"的键的顺序通常很重要,或者至少如果你想对多个键的组合进行排序。