我在mongodb中有一个大型集合(约270万个文档),并且有很多重复项。我尝试在集合上运行ensureIndex({id:1}, {unique:true, dropDups:true})
。
它向我展示了这个错误:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "too may dups on index build with dropDups=true",
"code" : 10092
}
主要问题是我无法重新插入文档。
答案 0 :(得分:1)
也许不是一个非常好的解决方案,但您可以定义一个新的集合并将其命名为coll2
。
在其上定义您的唯一索引。
阅读第一个集合中的所有项目。
db.collection.find().addOption(DBQuery.Option.awaitData).forEach(function(doc)
{
db.coll2.insert(doc, {continueOnError: true})
});
之后,删除旧收藏并将coll2
重命名为旧收藏品名称
对于2.7万美元的文档,它需要一些时间