如果在pymongo中不存在,如何创建带索引的集合?

时间:2017-10-03 08:09:30

标签: python indexing pymongo

我在pymongo中使用自动集合创建:

client = MongoClient(url)
db = client.get_default_database()
my_collection = db['my_collection']

我认为它是在最后一个语句中自动创建的并添加了

index_name = 'my_index'
if index_name not in my_collection.index_information():
     my_collection.create_index(..., name=index_name, unique=False)

不幸的是,这导致了错误

pymongo.errors.OperationFailure: Collection ... doesn't exist

这让我想到,该集合是在第一次保存时创建的。这使我无法放置索引创建代码。

所以,问题是:如何用索引创建集合,但只有它不存在?

我已经阅读了这个答案https://stackoverflow.com/a/9826294/258483但是不喜欢写两次检查存在意味着什么:

client = MongoClient(url)
db = client.get_default_database()
if 'my_collection' not in db.collection_names():
    db.createCollection('my_collection')

my_collection = db['my_collection']
index_name = 'my_index'
if index_name not in my_collection.index_information():
     my_collection.create_index(..., name=index_name, unique=False)   

1 个答案:

答案 0 :(得分:3)

如您所见,在一个不存在的集合上调用index_information但是会​​抛出OperationFailure。

只需先调用create_index即可:

client = MongoClient(url)
db = client.get_default_database()
my_collection = db['my_collection']
index_name = 'my_index'
my_collection.create_index(..., name=index_name, unique=False)

如果索引已存在,MongoDB服务器将忽略该命令。如果索引不存在,MongoDB将创建集合(如果需要)和集合上的索引。