2017-02-15 5 views
2

В другом вопросе (How do I copy a collection from one database to another database on the same server using PyMongo?) Я выяснил, как скопировать одну коллекцию MongoDB в другую базу данных на том же сервере. Однако это не копирует индексы в исходной коллекции, так как я могу их скопировать?Как скопировать индексы из одной коллекции в другую коллекцию с помощью PyMongo?

ответ

2

Таким образом, используя упрощенную установку следующим образом:

from pymongo import MongoClient 
client = MongoClient() 
client.db1.coll1.insert({'content':'hello world'}) 
client.db1.coll1.create_index(keys='content') 

Мы можем видеть, что это имеет пользовательский индекс:

>>> client.db1.coll1.index_information() 
{u'_id_': {u'key': [(u'_id', 1)], u'ns': u'db1.coll1', u'v': 1}, 
u'content_1': {u'key': [(u'content', 1)], u'ns': u'db1.coll1', u'v': 1}} 

Я затем создать вторую коллекцию coll2 путем копирования данных следующим образом:

client.db1.coll1.aggregate([{'$out':'coll2'}]) 

После этого, похоже, работает для копирования индекса:

for name, index_info in client.db1.coll1.index_information().iteritems(): 
    client.db1.coll2.create_index(keys=index_info['key'], name=name) 

Я был обеспокоен тем, что, поскольку coll2 будет уже иметь первичный ключ индекса «_id», это может вызвать ошибку, но это, кажется, работает так же, как что:

>>> client.db1.coll2.index_information() 
{u'_id_': {u'key': [(u'_id', 1)], u'ns': u'db1.coll2', u'v': 1}, 
u'content_1': {u'key': [(u'content', 1)], u'ns': u'db1.coll2', u'v': 1}} 
Смежные вопросы