热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pymongo:insert_many+唯一索引

如何解决《Pymongo:insert_many+唯一索引》经验,为你挑选了1个好方法。

我想insert_many()在我的收藏中提供文件.其中一些可能screen_name与集合中的现有文档具有相同的键/值对(在我的示例中).我在此密钥上设置了唯一的索引,因此出现错误.

my_collection.create_index("screen_name", unique = True)

my_collection.insert_one({"screen_name":"user1", "foobar":"lalala"})
# no problem

to_insert = [
    {"screen_name":"user1", "foobar":"foo"}, 
    {"screen_name":"user2", "foobar":"bar"}
]
my_collection.insert_many(to_insert)

# error : 
# File "C:\Program Files\Python\Anaconda3\lib\site-packages\pymongo\bulk.py", line 331, in execute_command 
# raise BulkWriteError(full_result)
# 
# BulkWriteError: batch op errors occurred

我想 :

    没有错误

    不更改现有文件(此处{"screen_name":"user1", "foobar":"lalala"})

    插入所有尚未存在的文档(此处{"screen_name":"user2", "foobar":"bar"})


编辑:正如有人在评论中所说的那样"这个问题是询问如何进行批量插入并忽略唯一索引错误,同时仍然插入成功的记录.因此,如何批量插入问题并不重复".请重新打开它.



1> ramnes..:

一种解决方案可以是使用ordered参数insert_many并将其设置为False(默认为True):

my_collection.insert_many(to_insert, ordered=False)

从PyMongo文档:

ordered(可选):如果True(默认)文档将按顺序插入服务器,按提供的顺序.如果发生错误,则中止所有剩余插入.如果False,文档将以任意顺序插入服务器,可能并行插入,并且将尝试所有文档插入.

虽然,在无法插入所有文档时仍然需要处理异常.

根据您的使用情况,您可以决定pass,记录警告或检查异常.


推荐阅读
author-avatar
潘佳锐_340
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有