2012-10-02 4 views
13

in meiner App muss ich ein paar meiner Modelle Eigenschaften entfernen.
ich ausgecheckt this link aber das erste Problem ist, dass die Eigenschaften sind auf einem polymodel und es gibt keine Möglichkeit werde ich auf expando für die Zeit wechseln, um die Eigenschaften zu entfernen, ich bin nicht einmal sicher, was passieren könnte, wenn ich eine polymodel ändern zu einem expando.Wie nbd Eigenschaften sauber zu entfernen

also wie entferne ich Eigenschaften von vorhandenen Entitäten?

ich dachte, alle StringProperty zu None zu setzen und dann diese aus dem Modellschema zu entfernen und neu zu implementieren. eine dieser Eigenschaften ist eine BooleanProperty, ich kann diese nicht auf None richtig stellen ?! oder ndb.PickleProperty ... wie soll ich das entfernen?

weiß jemand, wie man das richtig macht?

Antwort

33

Wenn Sie alle Ihre Entitäten aktualisieren möchten, ist der empfohlene Ansatz ein map/reduce-Job, der alle Entitäten liest und neu schreibt; Es lohnt sich jedoch nicht, abhängig davon, wie viele Daten Sie haben - die Karte/reduzieren ist auch nicht kostenlos.

Vergewissern Sie sich auch, dass Sie den Map-/Reduce-Job für eine kleine Teilmenge der Daten testen. Es ist bemerkenswert subtil, eine Eigenschaft wirklich von einer Entität zu entfernen, selbst wenn sie nicht mehr in der Modellklasse ist! Der beste Ansatz könnte sein:

if 'propname' in ent._properties: 
    del ent._properties['propname'] 
    ent.put() 
+0

thx guido! Ja, ich muss beurteilen, ob es wirklich Wert ist ... Ich habe rund 100k Entitäten, so dass es sogar in Ordnung sein könnte, die Eigenschaft aus dem Schema zu entfernen. Was passiert, wenn ich die Eigenschaft entferne, die Organisation neu repliziere und dann die Entität anerkenne? Würde dies diese Eigenschaften verwerfen oder müsste ich sie immer noch aus dem Objekt entfernen? – aschmid00

+6

Die Rückgabe nach der Schemaänderung entfernt den Eigenschaftswert nicht. (Dies ist eine absichtliche Funktion, die die Interoperabilität zwischen zwei Versionen einer App maximieren soll.) –

+0

ok gut zu wissen. – aschmid00

Verwandte Themen