如何使用Mongoengine删除嵌入式文档?
我有一个具有EmbeddedDocumentField的集合。我无法找到如何从集合中删除嵌入文档的示例。有人能给我提供一个例子或参考吗?如何使用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)
您可以$unset
a fiel d。使用MyDoc.objects.update(unset__myField=1)
或者用$pull
删除从列表例如,单个值:MyDoc.objects.update(pull__myField=Value)
参见:http://docs.mongoengine.org/en/latest/guide/querying.html?highlight=unset#atomic-updates
真棒谢谢罗斯! –
@罗斯你能帮我[这个](http://stackoverflow.com/questions/26151632/removing-a-column-from-a-dictfield-in-mongodb-flask-mongoengine)? –
你能只更新外文件和设置嵌入文档为空? AFAIK嵌入式文档只是一个恰好是子树的字段。 – 9000
我还没有尝试过,但似乎会工作。我是MongoDB和MongoEngine的新手,所以不确定是否有一个“正确”的方式来做到这一点。谢谢! –