首页 > 解决方案 > 使用 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'}

标签: pythonmongodb

解决方案


问题似乎与 ecpDocSorted 有关。

使用时

bulk.append(ecpDoc)  

代替

bulk.append(ecpDocSorted)

它工作正常。


推荐阅读