How do I copy the indexes from one collection to another collection using PyMongo?
在另一个问题中(如何使用PyMongo将集合从一个数据库复制到同一服务器上的另一个数据库?),我弄清楚了如何将一个MongoDB集合复制到同一服务器上的另一个数据库。 但是,这不会复制源集合上的索引,那么如何复制那些索引呢?
因此,使用简化的设置如下:
1 2 3 4 | from pymongo import MongoClient client = MongoClient() client.db1.coll1.insert({'content':'hello world'}) client.db1.coll1.create_index(keys='content') |
我们可以看到它具有一个自定义索引:
1 2 3 | >>> 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}} |
然后,我通过如下复制数据来创建第二个集合
1 | client.db1.coll1.aggregate([{'$out':'coll2'}]) |
然后,以下内容似乎可用于复制索引:
1 2 | for name, index_info in client.db1.coll1.index_information().iteritems(): client.db1.coll2.create_index(keys=index_info['key'], name=name) |
我担心,由于
1 2 3 | >>> 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}} |
1 2 3 4 5 6 | for name, index_info in db_1.collection_x.index_information().items(): keys = index_info['key'] del(index_info['ns']) del(index_info['v']) del(index_info['key']) db_2.collection_y.create_index(keys, name=name, **index_info) |