2015-07-07 4 views
1

Что вам нужно сделать для вывода index_information(), чтобы его можно было повторно импортировать с помощью create_index() или create_indexes()?С помощью PyMongo как импортировать индексы с помощью create_index(), которые были экспортированы с помощью index_information()?

>>> from pymongo import MongoClient 
>>> client = MongoClient("mongodb://host1") 
>>> db = client.MYDB 
>>> collection = db.MYCOLLECTION 
>>> index = db.provisioning.index_information() 
>>> index 
{u'_id_': {u'ns': u'MYDB.MYCOLLECTION', u'key': [(u'_id', 1)], u'v': 1}, u'Name_1': {u'unique': True, u'key': [(u'Name', 1)], u'v': 1, u'ns': u'MYDB.MYCOLLECTION', u'background': False}, u'MongoType_1': {u'key': [(u'MongoType', 1)], u'ns': u'MYDB.MYCOLLECTION', u'background': False, u'v': 1}} 
>>> client2 = MongoClient("mongodb://host2") 
>>> db2 = client2.MYDB 
>>> collection2 = db2.MYCOLLECTION 
>>> collection2.create_index(index) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/site-packages/pymongo/collection.py", line 1161, in create_index 
    keys = helpers._index_list(keys) 
    File "/usr/lib64/python2.6/site-packages/pymongo/helpers.py", line 55, in _index_list 
    raise TypeError("if no direction is specified, " 
TypeError: if no direction is specified, key_or_list must be an instance of list 
>>> collection2.create_indexes(index) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/site-packages/pymongo/collection.py", line 1046, in create_indexes 
    raise TypeError("indexes must be a list") 
TypeError: indexes must be a list 
+0

Согласно [документации PyMongo в] (http://api.mongodb.org/python /current/api/pymongo/collection.html?highlight=create_index#pymongo.collection.Collection.create_index) методы create_index или create_indexes требуют наличия одного ключа или списка пары ключей, направлений. Вы можете перебирать «индекс» в коде и формировать список, который может быть присвоен методу create_index –

+0

Как это работает? Можете ли вы привести мне пример? >>> за товар в index.iteritems(): ... collection2.create_index (пункт) ... Traceback (самый последний вызов последнего): Файл "", строка 2, в файла "/usr/lib64/python2.6/site-packages/pymongo/collection.py", строка 1162, в create_index name = kwargs.setdefault ("name", helpers._gen_index_name (ключи)) Файл "/ usr/lib64/python2.6/site-packages/pymongo/helpers.py ", строка 41, в _gen_index_name return _UUNDER.join ([% s_% s"% item для элемента в ключах]) ТипError: недостаточно аргументов для format string – perdurabo93

ответ

1

Попробуйте этот базовый код, это будет перебирать и добавить все индексы из одной коллекции в другую коллекцию,

from pymongo import MongoClient 

client = MongoClient("mongodb://host1") 
db = client.MYDB 
collection = db.MYCOLLECTION 
index = db.provisioning.index_information() 

client2 = MongoClient("mongodb://host2") 
db2 = client2.MYDB 
collection2 = db2.MYCOLLECTION 
for i in index.keys(): 
    name_index = index[i]['key'][0][0] 
    order = index[i]['key'][0][1] 
    collection2.create_index([(name_index, order)]) 
+0

Что делать, если ваши индексы намного сложнее, s все из них: { "v": 1, "ключ": { "Thing1.Thing2": 1, "Thing1.Thing3": 1, "Thing1.Thing3": 1, " Thing1.Thing4" : 1 }, "уникальный": правда, "н.з.": "MYDB.mycollection", "имя": "Thing1.Thing2_1_Thing1.Thing3_1_Thing1.Thing3_1_Thing1.Thing4_1" } – perdurabo93

Смежные вопросы