我遇到了类似的问题。我只需要在我的数据集中找到有效记录(我丢弃了重复顶点的记录)。
我重命名了集合 -
db.myCollection.renameCollection('myCollectionBk')
然后我将原始集合中的一条记录添加到新集合中,并向集合中添加地理空间索引
db.myCollection.insert(db.myCollectionBk.findOne()) // recreate the collection
db.myCollection.createIndex({geometry:"2dsphere"}) // create the index (assumes the geometry on the record is valid)
db.myCollection.remove({}) // remove the record
然后我将有效记录添加到新集合中。
db.myCollectionBk.find().forEach(function(x){
db.myCollection.insert(x);
})
无效的记录会被简单地忽略。
在您的情况下,您可能希望从您的insert中获取WriteResult,并查看它是否成功。就像是
var errors = []
db.myCollectionBk.find().forEach(function(x){
var result = db.myCollection.insert(x);
if (result.writeError) {
errors.push({x._id:result.writeError.errmsg});
}
})
作为另一种选择,请查看这个问题(我无法让它工作)