@@ -529,9 +529,10 @@ def insert(self, input):
529529 oldData = deepcopy (self .data )
530530 try :
531531 if isinstance (input , OrderedDict ):
532- self ._insert (input )
532+ self ._insert (sorte_id_field ( input ) )
533533 elif isinstance (input , list ):
534534 all_ids = set ()
535+ input = map (sorte_id_field , input )
535536 for i in input :
536537 if '_id' in i :
537538 if not self .options .object_field_order_matters and isinstance (i ['_id' ], HashableOrderedDict ):
@@ -824,7 +825,7 @@ def process_update_operator_pop(self, key, update_expression):
824825 def process_update_operator_pull_all (self , key , update_expression ):
825826 # print "Update Operator: $pullAll ", update_operator, update
826827 for k , v in update_expression .iteritems ():
827- # print "Inc : key: ", k, " value: ", v
828+ # print "pullAll : key: ", k, " value: ", v
828829 if k in self .data [key ]:
829830 if isinstance (self .data [key ][k ], list ):
830831 if len (self .data [key ][k ]) > 0 :
@@ -835,7 +836,9 @@ def process_update_operator_pull_all(self, key, update_expression):
835836
836837 def evaluate (self , query , document ):
837838 if len (query ) == 0 :
838- return True # match empty query, since coll.find({}) returns all docs
839+ # If we made it here, the evaluate function must NOT be called from the `find` function, and thus
840+ # we can return false. Note in find() function, an empty query means maches all documents.
841+ return False
839842 acc = True
840843 for field in query .keys ():
841844 if field == '_id' :
@@ -861,10 +864,10 @@ def process_update_operator_pull(self, key, update_expression):
861864 if self .evaluate (v , item ):
862865 # print "item match0!, remove: ", item
863866 self .data [key ][k ].remove (item )
864- elif isinstance (v , list ):
865- if item in v :
866- # print "item match1!, remove: ", item
867- self .data [key ][k ].remove (item )
867+ elif isinstance (v , list ):
868+ if item in v :
869+ # print "item match1!, remove: ", item
870+ self .data [key ][k ].remove (item )
868871 else :
869872 self .data [key ][k ] = [x for x in self .data [key ][k ] if x != v ]
870873 else :
@@ -1146,10 +1149,8 @@ def update(self, query, update, upsert, multi):
11461149 if not index .inError :
11471150 index .validate_and_build_entry (self .data .values ())
11481151 except MongoModelException as e :
1149- # print "*********************** Reseting update due to {}".format(e)
11501152 self .data = old_data
11511153 raise e
1152-
11531154 # need to create a new doc
11541155 if upsert and not any :
11551156 n += 1
0 commit comments