Skip to content

Commit af08da3

Browse files
committed
Use createIndexes command when available PYTHON-622
1 parent 36b8600 commit af08da3

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

pymongo/collection.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
helpers,
2525
message)
2626
from pymongo.cursor import Cursor
27-
from pymongo.errors import InvalidName
27+
from pymongo.errors import InvalidName, OperationFailure
2828
from pymongo.helpers import _check_write_command_response
2929
from 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

Comments
 (0)