@@ -218,7 +218,7 @@ def save(self, to_save, manipulate=True, safe=False, **kwargs):
218218 return self .insert (to_save , manipulate , safe , ** kwargs )
219219 else :
220220 self .update ({"_id" : to_save ["_id" ]}, to_save , True ,
221- manipulate , safe , ** kwargs )
221+ manipulate , safe , _check_keys = True , ** kwargs )
222222 return to_save .get ("_id" , None )
223223
224224 def insert (self , doc_or_docs , manipulate = True ,
@@ -298,7 +298,7 @@ def insert(self, doc_or_docs, manipulate=True,
298298 return return_one and ids [0 ] or ids
299299
300300 def update (self , spec , document , upsert = False , manipulate = False ,
301- safe = False , multi = False , ** kwargs ):
301+ safe = False , multi = False , _check_keys = False , ** kwargs ):
302302 """Update a document(s) in this collection.
303303
304304 Raises :class:`TypeError` if either `spec` or `document` is
@@ -385,9 +385,12 @@ def update(self, spec, document, upsert=False, manipulate=False,
385385 if not kwargs :
386386 kwargs .update (self .get_lasterror_options ())
387387
388+ # _check_keys is used by save() so we don't upsert pre-existing
389+ # documents after adding an invalid key like 'a.b'. It can't really
390+ # be used for any other update operations.
388391 return self .__database .connection ._send_message (
389392 message .update (self .__full_name , upsert , multi ,
390- spec , document , safe , kwargs ), safe )
393+ spec , document , safe , _check_keys , kwargs ), safe )
391394
392395 def drop (self ):
393396 """Alias for :meth:`~pymongo.database.Database.drop_collection`.
0 commit comments