2012-10-31 93 views
1

我試圖在NodeJS中使用一些打字稿代碼在mongodb文檔中插入/更新字符串數組。 下面的代碼是打字稿,但我想JS開發者將得到它的W/O型的任何問題:MongoDB Upsert添加到陣列

export function addEvents(entityId: string, 
          events: string[] , 
          callback:() => void) { 

    db.collection('events', function(error, eventCollection) { 
     if(error) { 
      console.error(error); return; 
     } 
     eventCollection.update({ _id: entityId }, { "$pushAll ": 
     { events: events }}, 
      function(error, result) { 
       if(error) { 
        console.error(error); return; 
       } 
       callback(); 
      }); 
    }); 
} 

文檔具有以下結構:

{ 
    _id : string 
    events : ["array","of","strings"] 
} 

我只是想在追加一個字符串數組現有數組的結尾用於特定的_id。

我不太得到,如果我要使用更新,保存,$推,$ pushall等

有人能解釋一下嗎?

回答

0

發現問題,我需要傳遞「{upsert = true}」作爲更新函數的第三個參數。

2

如果我理解正確的問題是,pushAll什麼都不做或更新返回錯誤?也許在你的例子中複製粘貼錯誤,但我認爲你在這裏有錯字。

{ "$pushAll ": { events: events }} 

應該

{ $pushAll: { events: events }} 
2

你更新的組合和$ pushAll看起來不錯的選擇。在這裏做什麼 - 這是用於追加數組到現有陣列。 $ push用於將一個元素添加到數組中。保存將涉及獲取現有的事件數組,追加到它,然後保存該文檔。

需要刪除「$ pushAll」中的額外空間。它可能有引號:「$ pushAll」。

1

爲了在這種情況下實現'upsert'語義,您需要使用$addToSet。如果要添加一組值,則需要引入$each修飾符。來自蒙戈殼:

db.events.update(
    { _id: entityId }, 
    { $addToSet: { $each: events } } 
)