中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB中怎么使用地理信息索引

發布時間:2021-07-16 16:56:01 來源:億速云 閱讀:132 作者:Leah 欄目:關系型數據庫

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之中最為基礎的命令。


看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇江市| 峨眉山市| 梨树县| 奉化市| 阿合奇县| 巫山县| 应城市| 苗栗县| 南涧| 防城港市| 禹州市| 承德县| 资源县| 曲沃县| 湖口县| 习水县| 沙湾县| 准格尔旗| 宝兴县| 台中县| 安国市| 长乐市| 湘阴县| 资兴市| 合川市| 双牌县| 揭西县| 抚州市| 法库县| 辽宁省| 寿宁县| 读书| 南宫市| 哈巴河县| 合阳县| 宜良县| 临海市| 景洪市| 南乐县| 疏勒县| 扬州市|