gpt4 book ai didi

mongodb - 皮蒙戈 : insert_many + unique index

转载 作者:可可西里 更新时间:2023-11-01 09:08:41 26 4
gpt4 key购买 nike

我想在我的集合中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

我愿意:

  1. 不报错
  2. 不改变已经存在的文件(这里{"screen_name":"user1", "foobar":"lalala"})
  3. 插入所有尚未存在的文档(此处为 {"screen_name":"user2", "foobar":"bar"})

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

最佳答案

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

my_collection.insert_many(to_insert, ordered=False)

From the PyMongo documentation:

ordered (optional): If True (the default) documents will be insertedon the server serially, in the order provided. If an error occurs allremaining inserts are aborted. If False, documents will be inserted onthe server in arbitrary order, possibly in parallel, and all documentinserts will be attempted.

尽管如此,当无法插入所有文档时,您仍然需要处理异常。

根据您的用例,您可以决定通过、记录警告或检查异常。

关于mongodb - 皮蒙戈 : insert_many + unique index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44610106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com