2016-09-18 7 views
0

私はmongodbで正しく更新操作を行っている既存のpythonメソッドを持っています。 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 
+0

update_specからObjectId型の_idフィールドを削除する方法はありますか? update_specをコレクションに再度挿入する必要があります。親切にお勧めします。以下は私が使用したコードですが、条件を削除すると動作しません。 self.mongo [db] [coll] .remove({update_spec [_id]:{"$ type":7}} self.mongo [db] [coll] .insert(update_spec) – Prasanna

答えて

0

挿入する前にupdate_specオブジェクトからidフィールドを削除します。これを行う具体的な方法は、IDがupdate_specのどのフィールドで、どのオブジェクトタイプであるかによって異なります。

+0

ありがとうございました。 {( '57dc1ef45cc819b6645af91d')、 'EMPNAME' のObjectId: 'qewreqwewq'、 'EMPID': '_id': '12312'} – Prasanna

+0

アンディ、 以下のようなI疲れが、そのないいずれかの以下 update_spec update_specの形式でありますupdate_specからフィールドを削除することも、コレクションに値を挿入することもできません。 ObjectIdフィールドを削除するためにupdate_specを渡す方法を教えてください。 self.mongo [db] [coll] .remove({"_ id":{"$ type":7}}) self.mongo [db] [coll] .insert(update_spec) – Prasanna

関連する問題