Mongo批量插入并避免多个键的重复值

时间:2016-04-30 13:15:54

标签: mongodb

我有两个集合items,有120,000个条目,itemHistories有超过2000万个条目。我通过提取列出项目的所有items数据的API,定期更新所有itemHistorieshistory

我需要做的是将历史数据批量插入集合,同时避免重复。此外,历史记录API仅返回dateinfoitem_id值。

是否可以在Mongo中批量插入,以便它不会为2个值组合添加重复项(date,item_id)。因此,如果已存在相同dateitem_id的条目,请不要添加该条目。基本上dateitem_id的唯一索引。它允许在集合中包含重复的date值,但前提是所有重复项的item_id不同。

一个项目可能有近百万个条目,因此我不认为从集合中获取历史记录并将其与API响应进行比较将是最佳的。

我目前的想法是向名为hash的集合添加另一个密钥md5(date,info,item_id),并使其成为唯一索引。建议?

1 个答案:

答案 0 :(得分:0)

在Mongoose和MongoDB的文档中进行了一些挖掘我发现有一个名为 Unique Compound Index 的东西可以解决我的问题并回答这个问题。因为在我不知道这样的事情之前我从未使用过索引。

  

您还可以对复合索引强制执行唯一约束。如果你   对复合索引使用唯一约束,然后MongoDB将   强制执行索引键值组合的唯一性。

     

例如,要在groupNumber,lastname和。上创建唯一索引   members集合的firstname字段,使用以下内容   在mongo shell中的操作:

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 } )