摘要:实现附近的人最近腾讯把漂流瓶这个张小龙引以为傲的产品下架,正所谓匹夫无罪怀璧其罪,漂流瓶本无罪,但是被一些人利用传播色情内容或广告,因此在月号深夜,腾讯关闭漂流瓶。此处采用指令查询附近的人。
MongoDB实现附近的人
最近腾讯把“漂流瓶”这个张小龙引以为傲的产品下架,正所谓:匹夫无罪怀璧其罪,漂流瓶本无罪,但是被一些人利用传播色情内容或广告,因此在11月30号深夜,腾讯关闭漂流瓶。那么作为微信另外的一个大家熟悉的功能“附近的人”会不会被下架呢?今天我们暂不讨论,咱们今天讨论的是附近的人怎么实现,当然实现的方式有很多种:比如Redis,MySQL,Postgresql,MongoDB,全文检索框架等。那今天我就使用MongoDB的LBS功能实现附近的人!
一、MongoDB简介MongoDB是一种NoSql数据库,是一个使用C++开发的高性能、开源,无模式的文档型数据库。MongoDB是面向文档的,文档以JSON格式,二进制JSON (BSON) 存储在MongoDB中。官方网站地址是:https://www.mongodb.com/ 。主要特点有:高性能、高可用、水平扩展能力强。支持完全索引,查询,支持服务器之间的数据复制和故障恢复。支持C++,Ruby,Java,Python,PHP,C,C#,Javascript,Perl等。
二、MongoDB与关系型数据库比较关系型数据库概念 | MongoDB概念 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
下载并安装mongodb数据库,下载并安装Robomongo,如有不知可以咨询小编!
四、数据准备往数据库中批量插入数据,use mage切换到mage数据库,执行db.user.insertMany(),user是文档名,insertMany()是批量插入命令,里面传入json数组,{"name":"杨帅哥", "address":"江西省南昌市青山湖区市场和质量监督管理局", "gender":1, loc:[115.993121,28.676436]}代表一条用户数据,其中gender:0代表女1,代表男,loc是一个经纬度的数组,当然也可以是loc : { lng : 115.993067 , lat : 28.67606 },但官方推荐数组。
db.user.insertMany([ {"name":"杨帅哥", "address":"江西省南昌市青山湖区市场和质量监督管理局", "gender":1, loc:[115.993121,28.676436]}, {"name":"王美眉", "address":"江西省南昌市青山湖区创新一路职位小厨", "gender":0, loc:[116.000093,28.679402]}, {"name":"张美眉", "address":"江西省南昌市青山湖区紫阳大道1916号", "gender":0, loc:[115.999967,28.679743]}, {"name":"李美眉", "address":"江西省南昌市青山湖区云中城", "gender":0, loc:[115.995593,28.681632]}, {"name":"彭美眉", "address":"江西省南昌市青山湖区北京东路1666号", "gender":0, loc:[115.975543,28.679509]}, {"name":"赵美眉", "address":"江西省南昌市青山湖区市场一路大润发", "gender":0, loc:[115.968428,28.669368]}, {"name":"廖美眉", "address":"江西省南昌市南昌县奥林匹克中心", "gender":0, loc:[116.035262,28.677037]}, {"name":"余帅哥", "address":"江西省南昌市南昌县科技学院瑶湖校区", "gender":1, loc:[116.02477,28.68667]}, {"name":"吴帅哥", "address":"江西省南昌市青山湖区创新一路母婴店", "gender":1, loc:[116.002384,28.683865]}, {"name":"何帅哥", "address":"江西省南昌市青山湖区紫阳大道2999号", "gender":1, loc:[116.000821,28.68129]}, ])五、设置2d索引
因为我以二维平面上点的方式存储的数据,想要进行LBS查询,那么要设置2d索引。db.user.createIndex({"loc":"2d"})其中loc是索引的字段。
六、查询附近200米的人查询附近的人,首先的指导当前用户所在的经纬度,如果不仅想要得到数据还要得到距离,那么可以使用$geoNear指令,如果距离自己去计算可以使用$near或者$geoWithin然后在手动计算距离。此处采用$geoNear指令查询附近2000m的人。
db.user.aggregate({ $geoNear:{ near: [115.999567,28.681813], // 当前坐标 spherical: true, // 计算球面距离 distanceMultiplier: 6378137, // 地球半径,单位是米,那么的除的记录也是米 maxDistance: 2000/6378137, // 过滤条件2000米内,需要弧度 distanceField: "distance" // 距离字段别名 } })
到这儿为止,采用mongodb的2d平面索引就能完成附近的好友搜索了,如果想要了解更多,欢迎来撩小编!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19425.html
摘要:介绍是一种数据库,它在数据存储的形态上和这类关系数据库有本质区别。存储的基本对象是,所以我们把它称为一种文档数据库,而文档的集合则组成了。 MongoDB 介绍 MongoDB 是一种 NoSQL 数据库,它在数据存储的形态上和 MySQL 这类关系数据库有本质区别。MongoDB 存储的基本对象是 Document,所以我们把它称为一种文档数据库,而文档的集合则组成了 Collect...
阅读 1268·2021-11-11 10:57
阅读 3690·2021-09-07 10:10
阅读 3429·2021-08-03 14:03
阅读 3046·2019-08-30 13:45
阅读 659·2019-08-29 11:19
阅读 1020·2019-08-28 18:07
阅读 3066·2019-08-26 13:55
阅读 774·2019-08-26 12:17