Ein MongoEngine-Dokument mit einem Python-Diktat aktualisieren?

9

Ist es möglich, ein MongoEngine-Dokument mit einem Python-Diktat zu aktualisieren?

Zum Beispiel:

%Vor%     
rednaw 25.09.2013, 10:30
quelle

4 Antworten

7

Ok, ich habe gerade eine Funktion dafür gemacht.

Sie nennen es wie update_document(document, data_dict) . Er durchläuft die Elemente von data_dict und ruft die Feldinstanz mit dem Schlüssel von data_dict ab. Es ruft dann field_value(field, value) auf, wobei field die Feldinstanz ist. field_value() überprüft den Typ des Feldes mit field.__class__ und liefert auf dieser Basis einen Wert, den MongoEngine erwartet. Zum Beispiel kann der Wert eines normalen StringField so zurückgegeben werden wie er ist, aber für ein EmbeddedDocumentField muss eine Instanz dieses eingebetteten Dokumenttyps erstellt werden. Es macht auch diesen Trick für die Elemente in Listenfeldern.

%Vor%

Verwendung:

%Vor%     
rednaw 25.09.2013, 14:30
quelle
4

Versuchen Sie etwas mehr so ​​

%Vor%     
hckjck 25.09.2013 11:32
quelle
3

Ich habe die meisten der obigen Antworten ausprobiert, aber keine scheint wirklich mit Embedded-Dokumenten zu funktionieren. Obwohl sie die Felder aktualisiert haben, die sie auch getan haben, löschten sie Inhalt der ungefüllten Felder im eingebetteten Dokument.

Dafür habe ich mich für einen Pfad entschieden, der von @hckjck vorgeschlagen wurde. Ich habe eine einfache Funktion geschrieben, die dict in ein Format umwandelt, damit es von document.update :

verarbeitet werden kann %Vor%

Nun diese Daten:

%Vor%

wird umgewandelt in:

%Vor%

Welches kann so verwendet werden

%Vor%

Auch verfügbar in diesem Sinn: Ссылка

Ich weiß nicht, wie effektiv das ist, aber es funktioniert.

    
Visgean Skeloru 18.12.2014 11:50
quelle
1

Hier ist eine Funktion zum Aktualisieren von Dokumenten mit EmbeddedDocuments. Es basiert auf der Lösung von @ rednaw, berücksichtigt jedoch, dass EmbeddedDocuments über EmbeddedDocuments verfügen.

%Vor%

Der Schlüssel hier ist die Methode field_value , bei der ein eingebettetes Dokument aktualisiert und nicht mit den Daten instanziiert wird.

Verwendungsbeispiel:

%Vor%

FYI Das ist eigentlich der Name meiner Katze.

EDIT: Tippfehler in Variablennamen.

    
Dawson 14.05.2014 14:11
quelle

Tags und Links