2012-01-31 80 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