Mongodb 如果将_id以外的密钥视为主键,如何插入_多个防止重复记录?
我有一个现有的MongoDB集合,其中每个文档如下-Mongodb 如果将_id以外的密钥视为主键,如何插入_多个防止重复记录?,mongodb,pymongo,Mongodb,Pymongo,我有一个现有的MongoDB集合,其中每个文档如下- { "_id":"5e7467b76fbf38cd13c4f322", "Revision":"HEXDEF", "Variant":"2800", } 我想使用insert\u many来插入一个数组,比如- data = [ { "Revision":"ABXDEF", "Variant":"1800", }, { "Revision":"H
{
"_id":"5e7467b76fbf38cd13c4f322",
"Revision":"HEXDEF",
"Variant":"2800",
}
我想使用insert\u many来插入一个数组,比如-
data = [
{
"Revision":"ABXDEF",
"Variant":"1800",
},
{
"Revision":"HEXDEF",
"Variant":"2400",
}
]
这里,我将修订视为我的主键,不想用它来插入一个记录,如果它已经存在。实现这一目标的正确方法是什么
目前我的MongoDB查询是-db[collection].insert_many(data)
你有两个选择;使用_id代替修订或创建唯一索引。我更喜欢后一种方法。此代码示例可能有助于:
from pymongo import MongoClient
from pymongo.errors import BulkWriteError
db = MongoClient()['mydatabase']
db.mycollection.create_index('Revision', unique=True)
data = [
{
"Revision":"ABXDEF",
"Variant":"1800",
},
{
"Revision":"HEXDEF",
"Variant":"2400",
},
{
"Revision": "ABXDEF",
"Variant": "2700",
},
{
"Revision": "ZZZZZZ",
"Variant": "3000",
}
]
# ordered=True (default) will stop writing on an error (only 2 records added)
# ordered=False will continue after with any subsequent inserts after the error
try:
result = db.mycollection.insert_many(data, ordered=True)
print (f'All ok - {result.nInserted} records inserted')
except BulkWriteError as e:
writeErrors = e.details.get('writeErrors')
print (f"{len(writeErrors)} WriteErrors and {e.details.get('nInserted')} records inserted")
print(writeErrors)
你考虑过一个新的计划吗?