我正试图在mongodb集合中创建一个2sphere
索引。索引需要在location
字段上,该字段采用GeoJSON格式:
location: {
coordinates: [lat, long],
type: "Point"
}
我在JS中的手动查询:
db.collection(COLLECTION_NAME).createIndex({ "location": "2dsphere" });
当我在Mongo Atlas中创建索引时,它在屏幕上出现并在几秒钟后消失。
创建索引时发生了一个错误,但我不知道是什么。
我的$near
查询:
db.collection(COLLECTION_NAME)
.find({
location: {
$near: {
$geometry: { type: "Point", coordinates: [lng, lat] },
$minDistance: 1000,
$maxDistance: 5000,
},
},
})
错误:
planner returned error :: caused by :: unable to find index for $geoNear query
这个错误是因为我的索引没有创建。
希望外面的人能帮忙!:(非常感谢!
使用的文档:https://www.mongodb.com/docs/manual/reference/operator/query/near/
GeoJSON坐标是long,lat
而不是lat,long
。很可能您的location
字段中有一些坏数据,这会妨碍索引的正确创建。如果1000个集合中有一个文档的地理数据不正确,则不会创建索引。要进行测试,如果可以的话,可以从集合中删除数据,创建2dsphere
索引,然后在循环中添加回数据,并查看insert
的返回代码。错误的GeoJSON数据会在插入时导致错误,允许您将这些项目标记为需要注意,但允许大多数项目使用索引支持进行插入。