2016-04-30 167 views
0

我有兩個集合items與120,000條目和itemHistories與超過2000萬條目。我通過提取一個API來定期更新所有itemsitemHistories,該API列出了項目的所有history數據。Mongo批量插入並避免重複值爲多個鍵

我需要做的是批量插入歷史數據到集合,同時避免重複。此外,歷史API僅返回date,info,item_id值。

是否有可能在Mongo中批量插入,以便它不會爲2個值(日期,item_id)添加重複項。因此,如果已有與dateitem_id相同的條目,請不要添加它。基本上dateitem_id的唯一索引。允許在集合中具有重複的date值,但前提是item_id對於所有重複項都是不同的。

一個項目可能有近百萬個條目,所以我不認爲從集合中獲取歷史記錄並將其與API響應進行比較將是最佳選擇。

我目前的想法是在名爲hash的集合中添加另一個關鍵字md5(date,info,item_id)並使其成爲唯一索引。建議?

回答

0

在Mongoose和MongoDB的文檔中挖掘一點點我發現有一個東西叫唯一複合索引解決了我的問題並回答了這個問題。因爲我從未使用過索引,所以我不知道這樣的事情是可能的。

您還可以對複合索引執行唯一約束。如果 對複合索引使用唯一約束,那麼MongoDB將 對索引鍵值的組合強制執行唯一性。

例如,爲了創建groupNumber唯一索引,姓氏,和成員集合的 姓名字段,使用以下 操作在蒙戈殼:

db.members.createIndex({ groupNumber: 1, lastname: 1, firstname: 1 }, { unique: true }) 

來源:https://docs.mongodb.org/manual/core/index-unique/


在我的情況下,我可以使用下面的代碼來避免重複:

db.itemHistories.createIndex({ date: 1, item_id: 1 }, { unique: true })