1
我想在MongoDB中使用以下功能。我有一個名爲'實體'的集合,它基本上存儲實體文本並且它是計數。該集合看起來像這樣:
[{u'_id': u'facebook', u'n': 120},
{u'_id': u'florida', u'n': 98},
{u'_id': u'vegas', u'n': 94},
{u'_id': u'andrew_mason', u'n': 93},
{u'_id': u'obama', u'n': 85},
{u'_id': u'twitter', u'n': 81},
{u'_id': u'outlook', u'n': 81},
{u'_id': u'delhi', u'n': 75},
{u'_id': u'google', u'n': 74},
{u'_id': u'virginia', u'n': 71}]
現在,我想用新的實體更新此集合。基本上,我將有新的實體在一個這樣的數組準備:
entitySet = ['google', 'Abhishek_Vaid', 'andrew_mason']
我的意圖是,爲集合中已經是實體的數量應該更新。對於集合中的實體而不是,它們的計數應該初始化爲1.我想使用單個MongoDB查詢來實現這兩種效果。到現在我已經能夠找到下面的查詢:(它在PyMongo的味道,但它仍然是一種MongoDB的查詢)
ENTITY_DB_HANDLE.entities.update(
{'_id' : {'$in' : entitySet} }, {'$inc' : {'n' : 1} }, upsert=True, multi=True)
然而,這個查詢只更新現有的實體計數和不推新實體
上任何想法
是的,我的錯誤。我已經更新了這個問題。請再次看看。但我不明白你的答案。 – VaidAbhishek 2013-03-04 10:21:20
@VaidAbhishek在我的答案的後半部分已經做了;)那永遠不會工作,因爲這不是upsert的工作原理。要做你想做的事情,你必須遍歷唯一的id併爲每個id調用upsert = true更新。 – 2013-03-04 11:12:29
謝謝你的時間。雅,我希望能避免它。但是,我仍然不確定它爲什麼不起作用。因爲,upsert = True顯然意味着對於每個處理過的文檔(通過_id匹配),如果文檔不存在,我的意圖是插入它。我的意思是,如果它不能工作,那麼我可能不會提供upsert選項,只處理multi = True。那麼首先使用upsert選項是什麼? – VaidAbhishek 2013-03-04 13:45:44