2014-03-06 30 views
0

我在Node.js中工作,並試圖將數組的內容推送或拉入到我的mongodb集合中。目前我的工作[]代碼,以從FieldArray陣列拉物體看起來是這樣的:在批量操作中更新變量數組中的MongoDB數組?

for (var i=0; i < MyList.length; i++) { 
    collection.update(
     {field:"MyValue"}, 
     {$pull: {FieldArray: MyList[i]}}, 
     function(err, item){...} 
    ); 
} 

我所知,使用$推的能力/每個$,$ addToSet/$每$ pullall但他們似乎並沒有從數組中動態地接受數值(或者我沒有發現它可以)。基本上,我希望能夠使用適當的批處理調用,使用一個或一百個數組的這個函數。

是否有任何方法可以進行此類調用,而無需在每次迭代中循環通過數據庫的單獨調用?

+0

你是什麼意思的動態數組?對於你的情況'{$ push:{FieldArray:{$ each:MyList}}}'完全可以工作。您不需要遍歷數組。 –

+0

動態的大小,使我不能總是具體像MyList [1]或MyList [5],因爲它可能不存在。如果你所說的話是真的(我毫不懷疑它是這樣),那麼當我嘗試這個時,我一定會做錯事,或者我認爲我嘗試過了。將再次嘗試並回報,謝謝! – squid808

回答

1

你想要$pullAll。它確實您要遍歷

collection.update(
    { "field": "MyValue" }, 
    { "$pullAll": { "FieldArray": MyList } } 
) 

如果不工作,那麼那麼你的數組元素不匹配您的文檔中使用的結構是什麼。讓他們這樣。

+0

這是深夜,我累了,但我完全糊塗名稱「拉」。爲什麼不把它稱爲「removeFromArray」,或者,如果你想與JavaScript一致,「拼接」?在30多年的編程中,我從來沒有聽說過用於「​​從陣列中移除元素」的「拉」。 Google的搜索很快就會和我一致。 – user949300

+0

@ user949300不知道。 $ pull匹配一個元素並刪除,$ pullAll匹配列表中的指定元素。沒有真正的切片或拼接。但$ push和$ pop在那裏。運營商只是做不同的事情。 –

+0

好吧,看起來我正處在正確的軌道上並關閉了,但一定是做錯了什麼,我再次嘗試過,並且它的工作效果很好,每次都使用$ pullAll和$ push/$。謝謝! – squid808