2017-10-03 4 views
0

나는 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을 읽고 있지만 두 존재의 확인을 작성하는 것을 의미하는 방법을 좋아하지 않는다 : 아직 존재하지 않는 컬렉션 index_information를 호출

보시다시피
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가 발생합니다.

그냥 먼저 확인하지 않고 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