2012-06-25 61 views
7

這是我的文檔的格式: 如何增加一個陣列內MongoDB的文檔對象字段

{ 
    _id: some id, 
    name: 'some name', 
    versions: [] 
} 

versions現場I存儲對象,如{v: '2.5', count: 5}其中count持有的次數的版本中使用。

執行以下操作的最簡單方法是什麼?

  1. 插入一個新的對象versions陣列內,如果不存在
  2. FF特定版本的versions數組中存在,那麼增加它的count

回答

10

最簡單的方式幸福是應該的,

db.collection.update({versions.v:'some_version'},{"$inc":{"versions.$.count":1}}); 

這會增加你的計數,如果vers離子是存在的,但正如MongoDB文檔所述,$運算符不能與upsert混合,因此如果{versions.v:'some_version'}失敗,上述查詢將不會導致插入。

由於位置操作符 需要匹配的數組元素,所以不能與位置操作符組合。如果您的更新結果爲插入 ,那麼字面上將使用「$」作爲字段名稱。

以下是JIRA支持upsert的門票$。您可以投票並觀看這些問題。

Upsert with $-positional operator can create bad documents

Support $ positional operator with an upsert

相關問題