2014-01-24 201 views
0

對我有對象的數組:MongoDB的findAndModify陣列

[{ 
    _id: 1, 
    data: 'one' 
},{ 
    _id: 2, 
    data: 'two' 
}] 

我收到一個新的陣列,每隔一段時間。有沒有辦法將所有數據散裝回mongo(沒有dups)。

I.E.我知道我可以循環遍歷每個元素,並執行findAndModify(對於新記錄來說,upsert爲true)。但我不能每次都使用數組插入,因爲ID會發生碰撞。

+0

你正在導入數據(mongoimport)還是數據在你有的代碼中被處理? –

+0

如果您只想插入新文檔並且不想使用重複的_id更新文檔,則可以使用帶有ContinueOnError選項的批量插入。有關更多詳細信息,請參閱http://docs.mongodb.org/manual/core/bulk-inserts/。 –

回答

0

至少在殼如果嘗試通過陣列和作品的每個元素到插入在一個步驟中它的週期的整個陣列,因此指令:

db.coll.insert([{ _id: 1, data: 'one' },{ _id: 2, data: 'two' }]) 

作品,並插入兩個不同的記錄。 _id檢查也可以,如果您再次嘗試,您會收到錯誤。 無論如何,有一個缺點,它是事實蒙戈週期真正的每一個記錄,如果你嘗試類似:

db.col.insert([{ _id: 1, data: 'one again' },{ _id: 5, data: 'five' }]) 

它不會工作,以測試重複由於蒙戈停在第一記錄,第二個從未處理。 還有其他一些技巧可以將它插入一個名爲「data」的單個節點的集合中,並以更快的速度進行處理,但是如果批量數據太大,則總是限制爲16mb記錄,而沒有任何方法將工作。

如果您使用mongoimport,可以使用--jsonArray參數,但您仍然限制爲16 MB。

如果您需要更大的數據塊,沒有其他方法可以做到。