如何使用PyMongo的find_one获取匹配aws_account_id的最新记录
解决PyMongo find_one获取最后插入匹配文档的问题
你的问题核心是没指定排序规则,MongoDB默认会按文档的_id升序返回结果——而_id的ObjectId里包含了插入时间戳,升序意味着你拿到的是最早插入的匹配文档,这就是为什么返回了错误的那一个。
直接修改你的find_one调用,加上排序参数就能解决:
report = securitydb.scout.find_one( {'aws_account_id': aws_account.account_number}, sort=[('_id', -1)] )
这里的sort=[('_id', -1)]告诉MongoDB按_id降序排列结果,这样最新插入的文档会排在最前面,find_one就会返回你想要的那个红色标记的文档。
如果你在文档里有自定义的时间戳字段(比如created_at),用它来排序会更直观,效果完全一样:
report = securitydb.scout.find_one( {'aws_account_id': aws_account.account_number}, sort=[('created_at', -1)] )
最后小提醒:确认一下aws_account.account_number的类型和文档中aws_account_id的类型完全匹配(比如都是字符串,不要一个是数字一个是字符串),避免因为类型不匹配导致的隐性查询问题。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

