在 Pymongo 中执行批量插入时如何忽略错误。我在 pymongo 中使用有序的批量写入操作
How to ignore errors while executing a bulk insertion in Pymongo. I am using ordered bulk write operation in pymongo
我正在尝试在 mongodb collection 中批量插入一些文档。
我对 collection 的 link 字段施加了唯一约束。
bulkUrls = db.urls.initialize_ordered_bulk_op()
for info in links:
info = urljoin(url['link'], info)
if '#' in info:
info = info[:info.index('#')]
if(validateUrl(info)):
bulkUrls.insert({'link' : info, 'last_processed' : 0, 'created_at' : time(), 'page_id' : str(inserted_id), 'opened' : False})
bulkUrls.execute()
附件是我的 python 代码。
我只想在 collection 中不存在具有相同 link
字段的其他文档时才插入该文档。
将不胜感激。
如果您不必使用有序批量操作,您可以改用无序批量操作。
无序的批量写入操作被批处理并以任意顺序发送到服务器,在那里它们可以并行执行。在尝试所有操作后报告发生的任何错误。
来自 pymongo documentation
所以只需使用:
bulkUrls = db.urls.initialize_unordered_bulk_op()
如果坚持使用ordered bulk,可以将write concern设置为0。
根据上面的link,
bulkUrls.execute({'w': 0})
注意:这将禁用写入确认,这意味着您将不知道写入操作是否成功("Not Recommended")。
我正在尝试在 mongodb collection 中批量插入一些文档。
我对 collection 的 link 字段施加了唯一约束。
bulkUrls = db.urls.initialize_ordered_bulk_op()
for info in links:
info = urljoin(url['link'], info)
if '#' in info:
info = info[:info.index('#')]
if(validateUrl(info)):
bulkUrls.insert({'link' : info, 'last_processed' : 0, 'created_at' : time(), 'page_id' : str(inserted_id), 'opened' : False})
bulkUrls.execute()
附件是我的 python 代码。
我只想在 collection 中不存在具有相同 link
字段的其他文档时才插入该文档。
将不胜感激。
如果您不必使用有序批量操作,您可以改用无序批量操作。
无序的批量写入操作被批处理并以任意顺序发送到服务器,在那里它们可以并行执行。在尝试所有操作后报告发生的任何错误。 来自 pymongo documentation
所以只需使用:
bulkUrls = db.urls.initialize_unordered_bulk_op()
如果坚持使用ordered bulk,可以将write concern设置为0。
根据上面的link,
bulkUrls.execute({'w': 0})
注意:这将禁用写入确认,这意味着您将不知道写入操作是否成功("Not Recommended")。