2016-04-29 16 views
6

In uno script Python utilizzando PyMongo, viene creato un indice per una raccolta utilizzando la lineaPyMongo create_index solo se non esiste

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

Tuttavia, questo genera un errore la prossima volta che lo script viene eseguito perché l'indice esistono già.

Domanda: C'è un modo per verificare l'esistenza di un indice prima di decidere se chiamare create_index?

risposta

9

È possibile utilizzare index_information() metodo:

Ottenere informazioni sugli indici di questa collezione.

Restituisce un dizionario in cui le chiavi sono nomi di indice (come restituito da create_index()) ei valori sono dizionari contenenti informazioni su ciascun indice.

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

C'è anche list_indexes() metodo che può anche essere utilizzato per risolverlo, ma il formato di uscita non è che conveniente come nel caso di index_information().

E, c'è il metodo ensure_index(), che sembra esattamente quello che stai chiedendo, ma questo metodo è ora deprecato.

+0

Le chiavi del dict restituite da index_information() sono nomi di indice (come restituiti da create_index), che sono diversi dalle chiavi dell'indice. Sei sicuro che il tuo codice funzioni? Si noti che è possibile specificare un nome personalizzato quando si crea un indice. –

0

Nella versione corrente di PyMongo (3.6.0), chiamando create_index non verrà ricreato l'indice se già esiste e non genererà un errore. La creazione dell'indice sarà semplicemente ignorata se l'indice esiste già.