2016-04-29 22 views
6

Trong một kịch bản Python sử dụng PyMongo, một chỉ số được tạo ra cho một bộ sưu tập sử dụng dòngPyMongo create_index chỉ nếu nó không tồn tại

myCollection.create_index('Datetime', unique=True) 

Tuy nhiên điều này ném một lỗi lần sau khi kịch bản được thực hiện bởi vì các chỉ số đã tồn tại.

Câu hỏi: Có cách nào để kiểm tra sự tồn tại của chỉ mục trước khi quyết định có gọi số create_index không?

Trả lời

9

Bạn có thể sử dụng phương pháp index_information():

Nhận thông tin về chỉ số của bộ sưu tập này.

Trả lại từ điển trong đó khóa là tên chỉ mục (được trả về bởi create_index()) và giá trị là từ điển chứa thông tin về mỗi chỉ mục.

index_name = 'Datetime' 
if index_name not in myCollection.index_information(): 
    myCollection.create_index(index_name, unique=True) 

Ngoài ra còn có phương pháp list_indexes() mà cũng có thể được sử dụng để giải quyết nó, nhưng định dạng đầu ra mà không phải là thuận tiện như trong trường hợp của index_information().

Và, có phương pháp ensure_index(), trông chính xác những gì bạn đang hỏi, nhưng phương pháp này hiện không được chấp nhận.

+0

Các khóa của dict được trả về bởi index_information() là các tên chỉ mục (được trả về bởi create_index), khác với các khóa chỉ mục. Bạn có chắc là mã của bạn hoạt động không? Lưu ý rằng bạn có thể chỉ định tên tùy chỉnh khi tạo chỉ mục. –

0

Trong phiên bản hiện tại của PyMongo (3.6.0), gọi create_index sẽ không tạo lại chỉ mục nếu nó đã tồn tại và sẽ không ném lỗi. Việc tạo chỉ mục sẽ bị bỏ qua nếu chỉ mục đã tồn tại.

Các vấn đề liên quan