获取"错误":"使用Java驱动程序插入mongo时出现E11000重复键错误

 HAOCWH 发布于 2023-02-02 20:25

我在这个页面上找到了答案.我猜你的代码看起来像这样(大大简化)?:

doc = {} 
for i in xrange(2): 
    doc['i'] = i 
    collection.insert(doc) 

问题是PyMongo 在插入文件之前(如果该_id字段不存在)将_id字段注入文档(_id始终使用10gen驱动程序生成客户端).这意味着第一次通过循环_id由insert方法添加.由于doc在循环外定义,因此每个后续循环都使用相同的_id.

解:

    删除键_id

for i in xrange(2): 
    doc['i'] = i 
    if '_id' in doc: 
        del doc['_id'] 
    collection.insert(doc)

    或者手动创建一个新的:

from bson.objectid import ObjectId 
for i in xrange(2): 
    doc['i'] = i 
    doc['_id'] = ObjectId() 
    collection.insert(doc)


Ori Dar.. 7

试着打电话myIdMapCollection.save(myObj);而不是myIdMapCollection.insert(myObj);

save方法与insertupsert 不同,意味着如果文档包含_id,则替换该文档.

我的猜测是你已经DBObject使用了游标| 查询,操纵它,并且您想要保留更改.在这种情况下,save是正确的方法.

所以,当调用insertDBObject已经与相关的_id,称insert这样失败了,因为你已经有一个文档_id的集合,它应该是唯一的(重复的索引错误).

2 个回答
  • 试着打电话myIdMapCollection.save(myObj);而不是myIdMapCollection.insert(myObj);

    save方法与insertupsert 不同,意味着如果文档包含_id,则替换该文档.

    我的猜测是你已经DBObject使用了游标| 查询,操纵它,并且您想要保留更改.在这种情况下,save是正确的方法.

    所以,当调用insertDBObject已经与相关的_id,称insert这样失败了,因为你已经有一个文档_id的集合,它应该是唯一的(重复的索引错误).

    2023-02-02 20:29 回答
  • 我在这个页面上找到了答案.我猜你的代码看起来像这样(大大简化)?:

    doc = {} 
    for i in xrange(2): 
        doc['i'] = i 
        collection.insert(doc) 
    

    问题是PyMongo 在插入文件之前(如果该_id字段不存在)将_id字段注入文档(_id始终使用10gen驱动程序生成客户端).这意味着第一次通过循环_id由insert方法添加.由于doc在循环外定义,因此每个后续循环都使用相同的_id.

    解:

      删除键_id

    for i in xrange(2): 
        doc['i'] = i 
        if '_id' in doc: 
            del doc['_id'] 
        collection.insert(doc)
    

      或者手动创建一个新的:

    from bson.objectid import ObjectId 
    for i in xrange(2): 
        doc['i'] = i 
        doc['_id'] = ObjectId() 
        collection.insert(doc)
    

    2023-02-02 20:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有