2012-01-31 40 views
2

我有一个ListField(DictField)包含了像项目 -拉mongoengine

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

在mongoengine,我怎样才能把查询上USER_ID List中的元素。例如,我想删除特定user_id的条目。我试过以下 -

update_one(pull__notes__user_id = '12345') 

这里notes是集合的名称。

该声明返回1,但它不会从列表中删除元素。我怎样才能做到这一点?

回答

5

两个这样做的方法:

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) 
+0

我不能使用第一个选项。第二个选择给我以下错误 - AttributeError:'BaseField'对象没有属性'lookup_member' – Siddharth 2012-01-31 15:21:02

+0

你可以提供你的模式,然后我应该可以做一个测试:) – Ross 2012-01-31 15:52:20

+0

什么版本的mongoengine? – Ross 2012-01-31 15:54:56