使用OCI SDK获取用量数据存入MongoDB时遇非空列表错误求解决
解决MongoDB插入时"documents must be a non-empty list"错误
错误原因
这个错误直接说明你传给MongoDB批量插入方法(比如insert_many())的文档列表是空的,根源要么是从OCI SDK获取的用量数据本身为空,要么是数据处理过程中把列表弄空了。
排查与解决步骤
检查OCI SDK返回的原始数据
- 在调用MongoDB插入前,先打印或记录OCI API返回的响应数据,重点看
response.data.items(OCI用量API的返回结构)是否有内容。 - 核对API调用参数:确认时间范围是否覆盖了有用量的时段,compartment ID是否正确,你的OCI账号是否有该compartment下资源的用量读取权限。如果参数错误或权限不足,API会返回空数据。
- 在调用MongoDB插入前,先打印或记录OCI API返回的响应数据,重点看
排查数据处理逻辑
- 检查你从OCI响应中提取、转换数据的代码,有没有误过滤所有数据的情况。比如用列表推导式时条件过于严格,或者转换字段时遗漏了所有元素。
- 示例:如果你的代码是
docs = [convert_to_mongo_format(item) for item in oci_data if item.usage > 0],但该时段所有资源用量都是0,就会生成空列表。
添加空列表判断
- 在执行MongoDB插入前,先判断文档列表是否为空,避免无效调用:
# 假设get_oci_usage_data()是你获取并处理数据的函数 usage_docs = get_oci_usage_data() if usage_docs: mongo_collection.insert_many(usage_docs) else: print("提示:无可用用量数据,跳过MongoDB插入")
- 在执行MongoDB插入前,先判断文档列表是否为空,避免无效调用:
验证MongoDB方法调用
- 确认你调用的是正确的MongoDB方法:如果插入单个文档,用
insert_one();批量插入才用insert_many()。不要把单个空文档包装成列表传入insert_many(),这也会触发错误。
- 确认你调用的是正确的MongoDB方法:如果插入单个文档,用
内容的提问来源于stack exchange,提问作者Bagadi Gopichand
相关产品推荐
相关产品推荐

