查询此文档的正确方法是什么? (如果索引正确)
What is the correct way to query this document? (If the index is correct)
我的机器中有一个 BigChainDB docker 容器 运行,我正在尝试存储和检索地理空间数据。
我通过 MongoDB 接口在 "metadata" 集合中创建了一个 2dsphere 索引 "location"。
我已经用命令检查过:
db.people.getIndexes()
而且我觉得一切都还好,其实结果是这样的:
{
"v" : 2,
"key" : {
"loc" : "2dsphere"
},
"name" : "loc_2dsphere",
"ns" : "bigchain.metadata",
"2dsphereIndexVersion" : 3
}
我为尝试一些空间查询而插入的文档是(这是 db.metadata.findOne() 查询的结果):
{
"_id" : ObjectId("5ccab10a2ce1b70022823a0f"),
"id" : "752ee9abccf83c7fd25d86c9a7d12229ae292fa27544f6881f1dbf97ccd8b413",
"metadata" : {
"location" : {
"type" : "Point",
"coordinates" : [
22.170872,
113.578749
]
}
}
}
但是当我使用这个空间查询时,没有检索到任何东西:
db.metadata.find(
{
"metadata": {
"location": {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ 22 , 113 ]
},
}
}
}
})
我做错了什么,或者索引可能不起作用?
这里有几个问题。
首先是索引在字段 loc
上,而您的查询正在查询 metadata.location
。
如果您尝试在 metadata.location
上创建 2dsphere 索引,您将看到第二个错误:
"errmsg" : "invalid point in geo near query $geometry argument: { type: \"Point\", coordinates: [ 22.0, 113.0 ] } longitude/latitude is out of bounds, lng: 22 lat: 113",
此错误表明您文档中定义的 GEOJSON 点无效,因为 113 的纬度值为 outside the acceptable range of [-90, 90]。
在编制索引之前,您需要将数据更正为有效的 GEOJSON。
我的机器中有一个 BigChainDB docker 容器 运行,我正在尝试存储和检索地理空间数据。 我通过 MongoDB 接口在 "metadata" 集合中创建了一个 2dsphere 索引 "location"。 我已经用命令检查过:
db.people.getIndexes()
而且我觉得一切都还好,其实结果是这样的:
{
"v" : 2,
"key" : {
"loc" : "2dsphere"
},
"name" : "loc_2dsphere",
"ns" : "bigchain.metadata",
"2dsphereIndexVersion" : 3
}
我为尝试一些空间查询而插入的文档是(这是 db.metadata.findOne() 查询的结果):
{
"_id" : ObjectId("5ccab10a2ce1b70022823a0f"),
"id" : "752ee9abccf83c7fd25d86c9a7d12229ae292fa27544f6881f1dbf97ccd8b413",
"metadata" : {
"location" : {
"type" : "Point",
"coordinates" : [
22.170872,
113.578749
]
}
}
}
但是当我使用这个空间查询时,没有检索到任何东西:
db.metadata.find(
{
"metadata": {
"location": {
$near: {
$geometry: {
type: "Point" ,
coordinates: [ 22 , 113 ]
},
}
}
}
})
我做错了什么,或者索引可能不起作用?
这里有几个问题。
首先是索引在字段 loc
上,而您的查询正在查询 metadata.location
。
如果您尝试在 metadata.location
上创建 2dsphere 索引,您将看到第二个错误:
"errmsg" : "invalid point in geo near query $geometry argument: { type: \"Point\", coordinates: [ 22.0, 113.0 ] } longitude/latitude is out of bounds, lng: 22 lat: 113",
此错误表明您文档中定义的 GEOJSON 点无效,因为 113 的纬度值为 outside the acceptable range of [-90, 90]。
在编制索引之前,您需要将数据更正为有效的 GEOJSON。