2016-04-29 7 views
6
existiert

In einem Python-Skript PyMongo verwendet wird, wird ein Index für eine Sammlung erstellt die LiniePyMongo create_index nur, wenn es nicht

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

jedoch dies einem Fehler das nächste Mal wirft das Skript, da der Index ausgeführt wird existieren bereits.

Frage: Gibt es eine Möglichkeit, die Existenz eines Index zu überprüfen, bevor Sie entscheiden, ob Sie create_index anrufen?

Antwort

9

können Sie index_information() Methode verwenden:

Informationen über die Sammlung Indizes holen.

Gibt ein Dictionary zurück, in dem die Schlüssel Indexnamen sind (wie von create_index() zurückgegeben) und die Werte Wörterbücher sind, die zu jedem Index die Informationen enthalten.

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

Es gibt auch list_indexes() Methode, die auch verwendet werden kann, um es zu lösen, aber das Ausgabeformat ist nicht so bequem wie bei index_information().

Und es gibt diese ensure_index() Methode, die genau nach was Sie suchen, aber diese Methode ist jetzt veraltet.

+0

Die von index_information() zurückgegebenen Schlüssel des dict sind Indexnamen (wie von create_index zurückgegeben), die sich von den Indexschlüsseln unterscheiden. Bist du sicher, dass dein Code funktioniert? Beachten Sie, dass beim Erstellen eines Index ein benutzerdefinierter Name angegeben werden kann. –

0

In der aktuellen Version von PyMongo (3.6.0) wird der Aufruf create_index den Index nicht neu erstellen, wenn es bereits vorhanden ist und keinen Fehler auslöst. Die Indexerstellung wird nur ignoriert, wenn der Index bereits existiert.