我在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)
答案 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将创建集合(如果需要)和集合上的索引。