我在MongoDb中执行一些空间查询时遇到了麻烦。我有一个集合" cities15000"每个记录都有这种格式
"_id" : ObjectId("5624aefe4728347a51b1d751"),
"geonameid" : "292932",
"name" : "Ajman",
"asciiname" : "Ajman",
"latitude" : "25.41111",
"longitude" : "55.43504",
"feature_code" : "PPLA",
"country_code" : "AE",
"population" : "226172",
"elevation" : "",
"timezone" : "Asia/Dubai",
"geography" : {
"type" : "Point",
"loc" : [
"55.43504",
"25.41111"
]
}
我创建了一个2dsphere索引db.cities15000.ensureIndex({loc : '2dsphere'})
然后我尝试使用$near
或$geonear
获得结果。
使用$ db.cities15000.find({loc: {$near: [55.400 ,25.400]} })
附近时,我收到此错误消息
Unable to execute query: error processing query...n planner returned error: unable to find index for $geoNear query"
这意味着我有一个错误的索引(我认为)。
但是当我使用db.runCommand({geoNear: "cities15000",near: { type: "Point", coordinates: [ 55.400 ,25.400 ] },spherical: true})
时
我明白了:
{
"results" : [],
"stats" : {
"nscanned" : 0,
"objectsLoaded" : 0,
"avgDistance" : NaN,
"maxDistance" : 0.0000000000000000,
"time" : 0
},
"ok" : 1.0000000000000000
}
这意味着它找不到任何附近的东西(假)。有许多类似的主题,但我已经尝试了那里提出的,没有任何工作。
答案 0 :(得分:0)
您在索引创建和查询中遇到错误:
根据你的json架构,没有loc,而是有 " geography.loc"
即。
IFormValidator.validate()
应该是
db.cities15000.find({loc: {$near: [55.400 ,25.400]} })