真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB中怎么使用地理信息索引-創(chuàng)新互聯(lián)

MongoDB中怎么使用地理信息索引,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)公司是專業(yè)的花山網(wǎng)站建設(shè)公司,花山接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行花山網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

地理信息索引分為兩類:2D平面索引,2DSphere球面索引。
在2D索引里面基本上能夠保存到信息就是坐標(biāo),也就是經(jīng)緯度坐標(biāo)。

范例:定義一個商鋪的集合
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集合就可以實現(xiàn)坐標(biāo)位置的查詢了。有兩種查詢方式:
  ● “$near”查詢:查詢距離某個點最近的坐標(biāo)點。
  ● "$geoWithin"查詢:查詢某個形狀內(nèi)的點。

范例:假設(shè)現(xiàn)在的坐標(biāo)是:[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 ] }

如果執(zhí)行了以上的查詢,實際上會將數(shù)據(jù)集合里面的前100個點的信息都返回來,可以設(shè)置距離范圍。

范例:設(shè)置查詢的距離范圍
> db.shop.find({"loc":{"$near":[30,30],"$maxDistance":20}})
{ "_id" : ObjectId("599396cd0184ff511bf02bc6"), "loc" : [ 20, 20 ] }
{ "_id" : ObjectId("599396ce0184ff511bf02bc9"), "loc" : [ 30, 50 ] }

但是需要注意一點,在2D索引里面雖然支持大距離,但是不支持最小距離。
但是也可以設(shè)置一個查詢的范圍,使用“$geoWithin”查詢,可以設(shè)置的范圍有:
矩形范圍($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數(shù)據(jù)庫里面,除了一些支持的操作函數(shù)之外,還有一個重要的命令:runCommand(),這個函數(shù)可以執(zhí)行特定的MongoDB命令。

范例:利用runCommand()實現(xiàn)信息查詢
> 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之中最為基礎(chǔ)的命令。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


分享文章:MongoDB中怎么使用地理信息索引-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/hhjoo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部