2016-12-26 5 views
1

Ich verwende den PyMongo-Treiber und ich habe ein Problem mit der update_many-Methode.Deaktivieren Sie die Erstellung neuer Felder mit update_many-Methode

Wenn ich versuche, den Wert eines nicht vorhandenen Felds in einem Dokument zu aktualisieren, wird dieses Feld erstellt. Ich möchte, dass die Methode stattdessen einen Fehler auslöst.

Da ich meine eigene Bibliothek entwickle, kann ich Code für dieses Problem schreiben. Daher bin ich an allen Lösungen interessiert, die Sie mir anbieten können.

+0

Wie wäre Update nur, wenn das Feld vorhanden ist? – styvane

+0

Vielen Dank für Ihre Antwort. Wie könnte ich wissen, ob das Feld existiert? – Matias

+1

Sie möchten also nur aktualisieren, wenn das Feld ['$ existiert'] (https://docs.mongodb.com/manual/reference/operator/query/exists/) Richtig? – styvane

Antwort

1

Sie möchten nur die Dokumente aktualisieren, die das angegebene Feld enthalten.

Um dies zu tun, müssen Sie den Abfrageoperator $exists in Ihren Filterkriterien verwenden, um nur diese Dokumente auszuwählen.

db.collection.update_many({'fiedname': {'$exists': True}}, update_document) 

Wenn Sie eine Ausnahme wollen erhöhen, wenn kein Dokument Ihrer Abfragekriterien übereinstimmt, ist der beste Weg, dies zu tun ist, um den Wert von modified_count oder matched_count nach Ihrer Anfrage zu überprüfen. Wenn es gleich 0 ist, dann erhöhen Sie Ihre Ausnahme.

Alles zusammen:

update_result = db.collection.update_many({'fiedname': {'$exists': True}}, update_document) 
if update_result.modified_count == 0: # you can also use matched_count 
    # raise your exception or what do whatever you want here. 
+0

Ja das ist es. Eine weitere Sache, wie soll ich tun, wenn ich einen Fehler auslösen möchte, wenn ein nicht vorhandenes Feld verwendet wird? – Matias

+0

Warum müssen Sie eine Ausnahme auslösen? Wenn das Feld nicht existiert, wird das Dokument nicht aktualisiert. – styvane

+0

weil ich eine Bibliothek für Benutzer schreibe, die Feedback zu ihren Aktionen haben möchten. Ich habe vielleicht eine Lösung: zuerst eine Suchabfrage mit nur '{'fiedname': {'$ exists': True}}' als Filter. Ich cursor.count() ist 0 dann ist das Feld unbekannt und ich kann eine Ausnahme auslösen. – Matias

Verwandte Themen