Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you delete an embedded document using Mongoengine?

I have a collection that has an EmbeddedDocumentField. I'm having trouble finding examples of how to delete an embedded document from the collection. Can someone provide me with an example or reference to one?

Here is what my setup looks like:

  • 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)
like image 364
Jeff E Avatar asked Mar 07 '14 02:03

Jeff E


People also ask

How do I delete a nested document in MongoDB?

To remove an element from a doubly-nested array in MongoDB document, you can use $pull operator. Now field "UserZipCode": "20010" has been removed from a doubly-nested array.

How to query Embedded document in MongoDB?

Accessing embedded/nested documents – In MongoDB, you can access the fields of nested/embedded documents of the collection using dot notation and when you are using dot notation, then the field and the nested field must be inside the quotation marks.


1 Answers

You can $unset a field using MyDoc.objects.update(unset__myField=1) Or using $pull to remove a single value from a list eg: MyDoc.objects.update(pull__myField=Value)

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

like image 179
Ross Avatar answered Nov 04 '22 10:11

Ross