如何使用Mongoengine删除嵌入文档?
我有一个集合,其中包含一个嵌入文档字段。我在找如何从这个集合中删除嵌入文档的例子时遇到了困难。有没有人能给我一个例子或者指个参考?
这是我的设置情况:
- Python 2.7.5
- Django 1.5.5
- MongoEngine 0.8.7
代码:
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)
2 个回答
1
user = User_.objects(username=username).get()
for ad in user.ads:
if str(ad["_id"]) == id:
user.ads.remove(ad)
user.save()
这是我找到的唯一一种从嵌套文档的数组中移除一个值的方法。
9
你可以用 $unset
来删除一个字段,比如可以这样写:MyDoc.objects.update(unset__myField=1)
。这行代码的意思是把叫做 myField
的字段给删掉。
另外,你也可以用 $pull
来从一个列表中移除某个值,比如:MyDoc.objects.update(pull__myField=Value)
。这行代码的意思是从 myField
这个列表里把指定的值给删掉。
想了解更多,可以查看这个链接:https://docs.mongoengine.org/guide/querying.html?highlight=unset#atomic-updates