2017-10-03 9 views
0

私はpymongoで自動収集の作成を使用していました:pymongoにインデックスがない場合、コレクションを作成するにはどうすればいいですか?

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

私はそれは残念ながら、これは

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

これをエラーの原因となった最後のステートメントに自動的に作成され、

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

を追加考えていました最初の保存時にコレクションが作成されると私は思っていました。これにより、インデックス作成コードを置く場所がありません。

したがって、問題は、インデックス付きのコレクションを作成する方法ですが、存在しない場合のみですか?

私はこの答え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

ご覧のとおり、存在していないが、まだOperationFailureをスローコレクションにindex_informationを呼び出します。

ただ、最初にチェックせずに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はコレクション(必要な場合)とコレクションのインデックスを作成します。

+0

これは 'OperationFailure'を発生させますか? – Dims

+0

インデックスがすでに存在する場合、MongoDBサーバーはコマンドを無視します。 –

+0

このコレクションは存在しない場合があります – Dims

関連する問題