2013-06-12 39 views
0

我有以下文檔模式:的MongoDB與更新查詢,創建並加入項目列出或增加項目的反

{ 
    date: dateValue 
    items: 
     [ 
      { name: 'a', counter: 4}, 
      { name: 'b', counter: 17}, 
      { name: 'aabbb', counter: 15}, 
      ... 
     ]  
} 

我想有UPSERT更新查詢,如果記錄創建整個記錄不存在。 此外,我想檢查列表中是否存在某個項目(通過它的名稱), 如果項目不存在,我想向計數器= 1的列表中添加一個新項目。 如果項目存在提高計數器1.

有沒有什麼辦法來做這個查詢與一個更新的聲明?

回答

0

你需要做兩兩件事:上更新

  1. 使用{upsert:1}標誌,如果它不存在插入特定日期的文件。

  2. 使用{$inc}運算符來增加您的項目值。事實證明,如果你增加一個不存在的字段,它將被創建爲值1(就好像它存在於值0)。

  3. 您可能無法使用您當前擁有的模式獲得上述成就。爲了增加一個計數器,它必須是名稱 - 例如「a」:1,「b」:17等。您現在將它作爲關鍵字:「name」,counter:「value」,這意味着您只能更新他們與位置運營商。但位置運營商要求你爲了成功更新的一個元素匹配,所以去使用$inc

所以看起來,如果你想這樣做,你將需要一個更新語句,如戰略改變你的模式 - 只有你可以決定是否要走,因爲它可能會影響你的其他讀寫操作與數據的交互方式。

+0

感謝您的回覆,我已經按照您的建議進行了模式更改,因爲這只是我能找到的解決方案。 –