Я работаю над приложением flask и использую с ним mongodb. В одной конечной точке я взял файлы csv и вставил содержимое в mongodb с помощью insert_many()
. Перед вставкой я создаю уникальный индекс для предотвращения дублирования на mongodb. Когда нет дублирования, я могу достичь inserted_ids
для этого процесса, но когда возникает ошибка дублирования, я получаю None
и не могу получить inserted_ids
. Я также использую ordered=False
. Есть ли способ получить inserted_ids
даже с ошибкой дублирования ключа?
def createBulk(): #in controller
identity = get_jwt_identity()
try:
csv_file = request.files['csv']
insertedResult = ProductService(identity).create_product_bulk(csv_file)
print(insertedResult) # this result is None when get Duplicate Key Error
threading.Thread(target=ProductService(identity).sendInsertedItemsToEventCollector,args=(insertedResult,)).start()
return json_response(True,status=200)
except Exception as e:
print("insertedResultErr -> ",str(e))
return json_response({'error':str(e)},400)
def create_product_bulk(self,products): # in service
data_frame = read_csv(products)
data_json = data_frame.to_json(orient="records",force_ascii=False)
try:
return self.repo_client.create_bulk(loads(data_json))
except bulkErr as e:
print(str(e))
pass
except DuplicateKeyError as e:
print(str(e))
pass
def create_bulk(self, products): # in repo
self.checkCollectionName()
self.db.get_collection(name=self.collection_name).create_index('barcode',unique=True)
return self.db.get_collection(name=self.collection_name).insert_many(products,ordered=False)