我有一个ListField(DictField)
,其中包含像
{'user_id': '12345', 'timestamp' : 'datetime-object'}
在mongoengine中,如何从user_id上查询的List中删除元素。例如,我想删除具有特定user_id的条目。我尝试了以下内容 -
update_one(pull__notes__user_id = '12345')
此处notes
是集合的名称。
此语句返回1
,但不会从List中删除该元素。我怎么能这样做?
答案 0 :(得分:6)
两种方法:
A)完全匹配元素:
class Simple(Document):
x = ListField()
Simple.drop_collection()
Simple(x=[{'hello': 'world'}, {'mongo': 'db'}]).save()
// Pull the dict
Simple.objects.update_one(pull__x={'mongo': 'db'})
B)匹配元素的一部分。 使用positional operator匹配元素并取消设置。
class Simple(Document):
x = ListField()
Simple.drop_collection()
Simple(x=[{'hello': 'world'}, {'mongo': 'db'}]).save()
// Set to None
Simple.objects.update_one(unset__x__S__mongo='db')
// Pull None
Simple.objects.update_one(pull__x=None)