我有两个集合items
,有120,000个条目,itemHistories
有超过2000万个条目。我通过提取列出项目的所有items
数据的API,定期更新所有itemHistories
和history
。
我需要做的是将历史数据批量插入集合,同时避免重复。此外,历史记录API仅返回date
,info
,item_id
值。
是否可以在Mongo中批量插入,以便它不会为2个值组合添加重复项(date,item_id)。因此,如果已存在相同date
和item_id
的条目,请不要添加该条目。基本上date
是item_id
的唯一索引。它允许在集合中包含重复的date
值,但前提是所有重复项的item_id
不同。
一个项目可能有近百万个条目,因此我不认为从集合中获取历史记录并将其与API响应进行比较将是最佳的。
我目前的想法是向名为hash
的集合添加另一个密钥md5(date,info,item_id)
,并使其成为唯一索引。建议?
答案 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 } )