您好,登錄后才能下訂單哦!
MongoDB中怎么使用地理信息索引,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
地理信息索引分為兩類:2D平面索引,2DSphere球面索引。
在2D索引里面基本上能夠保存到信息就是坐標,也就是經緯度坐標。
范例:定義一個商鋪的集合
db.shop.insert({loc:[10,10]});
db.shop.insert({loc:[20,10]});
db.shop.insert({loc:[10,20]});
db.shop.insert({loc:[20,20]});
db.shop.insert({loc:[100,100]});
db.shop.insert({loc:[80,30]});
db.shop.insert({loc:[30,50]});
范例:為s> db.shop.createIndex({"loc":"2d"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}hop集合定義2D索引
這個時候shop集合就可以實現坐標位置的查詢了。有兩種查詢方式:
● “$near”查詢:查詢距離某個點最近的坐標點。
● "$geoWithin"查詢:查詢某個形狀內的點。
范例:假設現在的坐標是:[30,30]
> db.shop.find({"loc":{"$near":[30,30]}})
{ "_id" : ObjectId("599396cd0184ff511bf02bc6"), "loc" : [ 20, 20 ] }
{ "_id" : ObjectId("599396ce0184ff511bf02bc9"), "loc" : [ 30, 50 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc4"), "loc" : [ 20, 10 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc5"), "loc" : [ 10, 20 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc3"), "loc" : [ 10, 10 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc8"), "loc" : [ 80, 30 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc7"), "loc" : [ 100, 100 ] }
如果執行了以上的查詢,實際上會將數據集合里面的前100個點的信息都返回來,可以設置距離范圍。
范例:設置查詢的距離范圍
> db.shop.find({"loc":{"$near":[30,30],"$maxDistance":20}})
{ "_id" : ObjectId("599396cd0184ff511bf02bc6"), "loc" : [ 20, 20 ] }
{ "_id" : ObjectId("599396ce0184ff511bf02bc9"), "loc" : [ 30, 50 ] }
但是需要注意一點,在2D索引里面雖然支持最大距離,但是不支持最小距離。
但是也可以設置一個查詢的范圍,使用“$geoWithin”查詢,可以設置的范圍有:
矩形范圍($box):{"$box":[[x1,y1],[x2,y2]]}
圓形范圍($center):{"$center":[[x1,y1],r]}
多邊形($polygon):{"$polygon":[[x1,y1],[x2,y2],[x3,y3],...]}
范例:查詢矩形范圍
> db.shop.find({"loc":{"$geoWithin":{$box:[[30,30],[80,80]]}}})
{ "_id" : ObjectId("599396ce0184ff511bf02bc9"), "loc" : [ 30, 50 ] }
{ "_id" : ObjectId("599396cd0184ff511bf02bc8"), "loc" : [ 80, 30 ] }
范例:查詢圓形范圍
> db.shop.find({"loc":{"$geoWithin":{$center:[[30,30],20]}}})
{ "_id" : ObjectId("599396cd0184ff511bf02bc6"), "loc" : [ 20, 20 ] }
{ "_id" : ObjectId("599396ce0184ff511bf02bc9"), "loc" : [ 30, 50 ] }
在MongoDB數據庫里面,除了一些支持的操作函數之外,還有一個重要的命令:runCommand(),這個函數可以執行特定的MongoDB命令。
范例:利用runCommand()實現信息查詢
> db.runCommand({"geoNear":"shop","near":[30,30],"maxDistance":20,num:2})
{
"results" : [
{
"dis" : 14.142135623730951,
"obj" : {
"_id" : ObjectId("599396cd0184ff511bf02bc6"),
"loc" : [
20,
20
]
}
},
{
"dis" : 20,
"obj" : {
"_id" : ObjectId("599396ce0184ff511bf02bc9"),
"loc" : [
30,
50
]
}
}
],
"stats" : {
"nscanned" : 4,
"objectsLoaded" : 2,
"avgDistance" : 17.071067811865476,
"maxDistance" : 20,
"time" : 0
},
"ok" : 1
}
這類的命令可以說是MongoDB之中最為基礎的命令。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。