3

我有一个ListField(DictField)包含以下项目的项目 -

{'user_id': '12345', 'timestamp' : 'datetime-object'}

在 mongoengine 中,如何从 user_id 上查询的列表中删除元素。例如,我想删除具有特定 user_id 的条目。我尝试了以下 -

update_one(pull__notes__user_id = '12345')

notes是集合的名称。

此语句返回1,但不会从 List 中删除元素。我怎样才能做到这一点?

4

1 回答 1

8

这样做的两种方法:

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) 匹配元素的一部分。使用位置运算符匹配元素并取消设置。

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)
于 2012-01-31T13:20:55.763 回答