2424 helpers ,
2525 message )
2626from pymongo .cursor import Cursor
27- from pymongo .errors import InvalidName
27+ from pymongo .errors import InvalidName , OperationFailure
2828from pymongo .helpers import _check_write_command_response
2929from pymongo .message import _INSERT , _UPDATE , _DELETE
3030
@@ -949,10 +949,8 @@ def create_index(self, key_or_list, cache_for=300, **kwargs):
949949 keys = helpers ._index_list (key_or_list )
950950 index_doc = helpers ._index_document (keys )
951951
952- index = {"key" : index_doc , "ns" : self .__full_name }
953-
954952 name = "name" in kwargs and kwargs ["name" ] or _gen_index_name (keys )
955- index [ "name" ] = name
953+ index = { "key" : index_doc , " name" : name }
956954
957955 if "drop_dups" in kwargs :
958956 kwargs ["dropDups" ] = kwargs .pop ("drop_dups" )
@@ -962,9 +960,16 @@ def create_index(self, key_or_list, cache_for=300, **kwargs):
962960
963961 index .update (kwargs )
964962
965- self .__database .system .indexes .insert (index , manipulate = False ,
966- check_keys = False ,
967- ** self ._get_wc_override ())
963+ try :
964+ self .__database .command ('createIndexes' , self .name , indexes = [index ])
965+ except OperationFailure , exc :
966+ if exc .code in (59 , None ):
967+ index ["ns" ] = self .__full_name
968+ self .__database .system .indexes .insert (index , manipulate = False ,
969+ check_keys = False ,
970+ ** self ._get_wc_override ())
971+ else :
972+ raise
968973
969974 self .__database .connection ._cache_index (self .__database .name ,
970975 self .__name , name , cache_for )
0 commit comments