python - 使用 Python 的 MongoDB 批量插入失败
问题描述
我使用以下代码实现了一个简单的批量上传,假设我可以将预设数量的 Json 文档(又名 ecpDocSorted,它是一个字典)聚合到一个批量列表中,并在收集 5 个文档后刷新它。ecpDocSorted 包含一个简单的 Json 结构 - 所有没有 id 的键/值。
代码片段看起来像这样
#
# Sorting the ecpDoc by keys
#
for k in sorted(ecpDoc.keys()):
ecpDocSorted[k] = ecpDoc[k]
ecpDoc = dict(ecpDocSorted)
#
# Insert into MongoDB
#
bulk.append(ecpDocSorted)
if len(bulk) == 5:
# insert into Mongo
result = mycol.insert_many(bulk)
print(result)
bulk = []
上传单个文档(使用 len(bulk)==1)可以正常工作,并且文档最终会出现在 Mongo 中。
对于任何其他数字(例如 len(bulk)==5),它会失败并出现以下错误:
raise BulkWriteError(full_result)
pymongo.errors.BulkWriteError: batch op errors occurred
我错过了什么?
根据评论添加:
ecpDocSorted 示例:
{'address1': 'SOME ADDRESS', 'city': 'Arecibo', 'country': 'US', 'languages': 'English', 'name': 'SOME NAME', 'phone': '123-123-1234', 'postalcode': '00612'}
解决方案
问题似乎与 ecpDocSorted 有关。
使用时
bulk.append(ecpDoc)
代替
bulk.append(ecpDocSorted)
它工作正常。
推荐阅读
- python - subprocess.check_output() 中的 stderr=subprocess.STDOUT 有什么用?
- r - 如何从成对相关data.frame中获取相关矩阵?
- python - 来自 Django 的开发服务器端口绑定错误的 ptvsd 远程调试
- r - 如何在 R Studio 中从数据表中绘制选定的行
- python - 使用 sshtunnel 模块的 SSH 隧道不允许空密码
- grails - 如何更改 grails 项目中的 URL?
- javascript - 试图避免在ajaxcall之后滚动条返回开始
- r - 优化例程在自动编码器包中的自动编码功能中给出错误
- c# - 将 Office 互操作图像附件转换为 OpenXML
- java - Apache CXF JAXB Marshaller 未正确编组 @XmlAttribute