同様の問題に遭遇しました。データセット内の有効なレコードを見つける必要がありました (Duplicate Vertices でレコードを破棄しました)。
コレクションの名前を変更しました -
db.myCollection.renameCollection('myCollectionBk')
次に、元のコレクションの 1 つのレコードを新しいコレクションに追加し、コレクションに地理空間インデックスを追加しました。
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});
}
})
別の方法として、この質問をチェックしてください(これを機能させることができませんでした)