【问题标题】:MongoDB:Can't canonicalize query: BadValue bad geo queryMongoDB:无法规范化查询:BadValue bad geo query
【发布时间】:2014-11-11 15:47:04
【问题描述】:

我在 2dsphere 上为字段 loc 编制了索引,但无法对 Point 类型的 GeoJson 数据运行 geowithin 查询。

这里是查询:

 db.test.find( { loc :
                     { $geoWithin :
                        { $geometry :
                           { type : "Polygon" ,
                             coordinates : [ [ [-74.6862705412253, 40.42341005] , 
                                               [-75.0846179, 39.9009465 ], 
                                               [-74.20570119999999, 41.0167639 ]
                                             ]
                                           ]
                           } 
                         } 
                      } 
                 } 

输出:

  uncaught exception: error: {
"$err" : "Can't canonicalize query: BadValue bad geo query",
"code" : 17287
}

文档结构:

         {
           "_id" : ObjectId("53d15e7132e7b7978c472e6e"),
           "loc" : {
                  "type" : "Point",
                   "coordinates" : [ -74.6862705412253, 40.42341005 ]
                   },

         }

索引:

{
"0" : {
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "name" : "_id_",
    "ns" : "collab.test"
},
"1" : {
    "v" : 1,
    "key" : {
        "loc" : "2dsphere"
    },
    "name" : "TestLocationIndex",
    "ns" : "collab.test",
    "2dsphereIndexVersion" : 2
}

}

但是,$Polygon 可以在相同的文档上正常工作。我想了解为什么 geowithin 不起作用?

【问题讨论】:

    标签: mongodb geospatial geojson 2dsphere


    【解决方案1】:

    这是因为你的多边形不是闭合的,你实际上需要至少四个点才能得到一个有效的多边形,第一个点在最后重复,参见GeoJSON Polygon docs。必须说,错误消息可能会更有帮助。 Well Known Text (WKT) 和 Well Known Binary (WKB) 多边形格式也是如此,因此不是 GeoJSON 的特性。

    您的查询应该是这样的:

    db.test.find({loc :
                    {$geoWithin :
                        {$geometry :
                           {type : "Polygon" ,
                               coordinates : [[[-74.6862705412253, 40.42341005] , 
                                               [-75.0846179, 39.9009465], 
                                               [-74.20570119999999, 41.0167639],
                                               [-74.6862705412253, 40.42341005]]]                                     
                            } 
                        } 
                     } 
                 } 
    

    【讨论】:

    • 不客气。 MongoDB 空间错误可能有点无用。
    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多