У меня есть существующий метод python, который корректно выполняет операцию обновления в mongodb. У меня есть требование, где, если какой-либо документ изменен в mongodb, мне нужно создать новый документ в том же сборнике для целей аудита. Поэтому я добавил ниже фрагмент кода в существующем методе для выполнения операции вставки.mongo_connector.errors.OperationFailed: insertDocument :: вызвано :: 11000 E11000 повторяющимся индексом ошибки ключа
self.mongo[db][coll].insert(update_spec)
Как я передаю же ObjectId существующего документа к моей операции вставки его неисправной с ниже исключением,
mongo_connector.errors.OperationFailed: insertDocument :: caused by :: 11000 E11000 duplicate key error index: mongotest1.test.$_id_ dup key: { : ObjectId('57dc1ef45cc819b6645af91d') }
Есть ли способ игнорировать ObjectId существующего документа, так что я могу вставить другие существующие значения в мой новый вставленный документ? Пожалуйста, предложите. Ниже приведен полный код.
def update(self, document_id, update_spec, namespace, timestamp):
"""Apply updates given in update_spec to the document whose id
matches that of doc.
"""
db, coll = self._db_and_collection(namespace
self.mongo[db][coll].insert(update_spec)
self.meta_database[meta_collection_name].replace_one(
{self.id_field: document_id, "ns": namespace},
{self.id_field: document_id,
"_ts": timestamp,
"ns": namespace},
upsert=True)
no_obj_error = "No matching object found"
updated = self.mongo[db].command(
SON([('findAndModify', coll),
('query', {'_id': document_id}),
('update', update_spec),
('new', True)]),
allowable_errors=[no_obj_error])['value']
return updated
Есть способ, которым я могу удалить поле _id типа ObjectId из update_spec. Мне нужно снова вставить update_spec в коллекцию. Пожалуйста, предложите. Ниже приведен код, который я использовал, но условие удаления не работает. self.mongo [db] [coll] .remove ({update_spec [_id]: {"$ type": 7}}) self.mongo [db] [coll] .insert (update_spec) – Prasanna