当我尝试在几何体db.polygons.createIndex({"geometry":"2dsphere"})
上创建索引时,它会停在某个多边形,错误代码为16755.它表示Can't extract geo keys
和Duplicate vertices: 18 and 20
。
因此,经过进一步检查,当多边形中的2个节点靠近在一起,甚至重复时,似乎会发生这种情况。
然后我在QGIS中手动删除此节点并重新尝试该过程,只是为了找到具有相同问题的另一个多边形。
如何解决此问题,而无需重复修复多边形的整个过程>上传到MongoDB>创建索引?有没有办法可以找出有多少多边形有这个问题?
答案 0 :(得分:4)
我遇到了类似的问题。我只需要在我的数据集中找到有效记录(我丢弃了带有重复顶点的记录)。
我重命名了这个集合 -
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);
})
简单地忽略无效记录。
在您的情况下,您可能希望从WriteResult获取insert,并查看是否成功。像
这样的东西var errors = []
db.myCollectionBk.find().forEach(function(x){
var result = db.myCollection.insert(x);
if (result.writeError) {
errors.push({x._id:result.writeError.errmsg});
}
})
作为另一种选择,请查看this question(我无法让它工作)
答案 1 :(得分:1)
所以我做的是,我首先用索引创建了集合,然后尝试使用mongoimport插入,这给了我成功插入了多少。
> db.someNewCollection.createIndex({"geometry":"2dsphere"})
要将GeoJSON插入MongoDB,我执行了以下操作:
$ jq --compact-output ".features" yourGeoJSON > output.geojson
$ mongoimport --db someDB -c someNewCollection --file "output.geojson" --jsonArray
答案 2 :(得分:0)
MongoDB 错误代码 16755 由于字段不匹配而出现,因此您只需要将相同数量的数据发送到表中即可。