如何使用PyMongo将一个集合的索引复制到另一个集合?

4
2个回答

4

因此,使用以下简化设置:

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}}

3
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接