重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

MongoDB中怎么使用地理信息索引-创新互联

MongoDB中怎么使用地理信息索引,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联公司是专业的花山网站建设公司,花山接单;提供成都网站建设、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行花山网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

地理信息索引分为两类: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之中最为基础的命令。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联-成都网站建设公司行业资讯频道,感谢您对创新互联的支持。


网站栏目:MongoDB中怎么使用地理信息索引-创新互联
网站地址:http://cqcxhl.com/article/hhjoo.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP