2014-03-07 2 views
6

Ich habe eine Sammlung mit einem EmbeddedDocumentField. Ich habe Probleme, Beispiele zum Löschen eines eingebetteten Dokuments aus der Sammlung zu finden. Kann mir jemand ein Beispiel oder einen Verweis auf einen geben?Wie löscht man ein eingebettetes Dokument mit Mongoengine?

Hier ist, was mein Setup wie folgt aussieht:

  • Python 2.7.5
  • Django 1.5.5
  • MongoEngine 0.8.7

Code:

class Merchant(Document): 
    merchant_id = StringField(max_length=50) 
    merchant_name = StringField(max_length=150) 
    merchant_name_search_alias = StringField(max_length=150) 
    website = StringField(max_length=150) 
    location = ListField(EmbeddedDocumentField(Location)) 
    address = StringField(max_length=50) 
    city = StringField(max_length=30) 
    state = StringField(max_length=20) 
    zipcode = IntField() 
    phone_nummber = StringField(max_length=10) 
    sub_lat = FloatField() 
    sub_lng = FloatField() 
    country = StringField(max_length=20) 
    promotion = ListField(EmbeddedDocumentField(Promotion)) 


class Promotion(EmbeddedDocument): 
    provider_name = StringField(max_length=50) 
    provider_website = URLField() 
    promo_name = StringField(max_length=300) 
    promo_name_search_alias = StringField(max_length=100) 
    retail_price = DecimalField(precision=2, force_string=True) 
    discount_price = DecimalField(precision=2, force_string=True) 
    deal_url = URLField() 
    buy_url = URLField() 
    deal_image_url = URLField() 
    description = StringField(max_length=1000) 
    start_at = DateTimeField() 
    end_at = DateTimeField() 
    category = StringField(max_length=50) 
    dq_category = StringField(max_length=50) 
    keywords = StringField(max_length=100) 
+0

Können Sie nur das äußeree Dokument aktualisieren und setzen das eingebettete Dokument auf null? AFAIK ein eingebettetes Dokument ist nur ein Feld, das zufällig ein Teilbaum ist. – 9000

+0

Ich habe das nicht versucht, aber scheint so zu funktionieren. Ich bin neu bei MongoDB und MongoEngine, also war ich mir nicht sicher, ob es einen "richtigen" Weg dafür gab. Vielen Dank! –

Antwort

7

Sie können $unset ein Ziel d mit MyDoc.objects.update(unset__myField=1) Oder mit $pull einen einzelnen Wert aus einer Liste zB entfernen: MyDoc.objects.update(pull__myField=Value)

See: http://docs.mongoengine.org/en/latest/guide/querying.html?highlight=unset#atomic-updates

+0

Super danke, Ross! –

+0

@Ross können Sie mir helfen mit [dies] (http://stackoverflow.com/questions/26151632/removing-a-column-from-a-dictfield-in-mongodb-flask-mongoengine)? –