我有一个如下所示的数据结构。如何为该结构定义地理索引?
{
"currentGeoLocation": {
"latitude": -10,
"longitude": 1
}
}
我试过这些命令: 1 -
db.test.ensureIndex({ type: "geo", fields: [ "currentGeoLocation[latitude]","currentGeoLocation[longitude]" ] });
2 -
db.test.ensureIndex({ type: "geo", fields: [ "currentGeoLocation.latitude","currentGeoLocation.longitude" ] });
但我认为没有一个正常。因为在我搜索最近的物品后,我得到了[]。 这个问题是什么?
答案 0 :(得分:3)
您的第二个索引创建是正确的。
必须知道,纬度和经度不是实际公里单位。在a distance calculator中输入[-10, 1]
(这也是关于计算详情的一个很好的读物)会告诉您1117 km
远离[0,0]
。由于ArangoDB中半径的单位为m
,因此数字会变大。
在实际位置搜索肯定会找到您的项目:
db._query('FOR item IN WITHIN(test, -10, 1, 1) RETURN item').toArray()
但是,从[0,0]
搜索需要更大的半径:
db._query('FOR item IN WITHIN(test, 0, 0, 1200000) RETURN item').toArray()
[
{
"_key" : "840",
"_id" : "test/840",
"_rev" : "840",
"currentGeoLocation" : {
"latitude" : -10,
"longitude" : 1
}
}
]
答案 1 :(得分:1)
继上一个回答之后,您使用的是arangosh界面还是arangodb js?
我问,因为arangodb js界面不同。在这种情况下,你会看到类似的东西:
db.collection('testnodes').createGeoIndex(['currentGeoLocation.latitude', 'currentGeoLocation.longitude'])
此外,arangodb会带来许多非常有用的地理位置功能(靠近,内部等),它们具有辅助功能以自动计算距离。