1,在mongodb中创建lbs_db数据库,collection名称lbs_info,要使用lbs查询功能,需要对二维数据列建立索引

db.lbs_info.ensureIndex( { locs : "2d" } );

2,Servlet源码如下:

package com.ciaos.lbs;

import java.io.IOException;
import java.net.UnknownHostException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo; public class LBSServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 1L;
private Mongo mongo = null; final private String MongoDbIp = "127.0.0.1";
final private Integer MongoDbPort = 27017;
final private String MongoDbName = "lbs_db"; @Override
public void init() throws ServletException {
// TODO Auto-generated method stub
try {
mongo=new Mongo(MongoDbIp, MongoDbPort);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
}
super.init();
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { String uid = req.getParameter("uid");
String lon = req.getParameter("lon");
String lat = req.getParameter("lat");
if(uid == null || lon == null || lat == null){
resp.sendError(400,"bad request");
return;
}
int skip = 0, limit = 10;
try{
skip = Integer.parseInt(req.getParameter("skip"));
limit = Integer.parseInt(req.getParameter("limit"));
}
catch(Exception ex){
skip = 0;
limit = 10;
}
try{
DB db=mongo.getDB(MongoDbName);
DBCollection col = db.getCollection("lbs_info");
BasicDBList dbl = new BasicDBList();
dbl.add(Double.parseDouble(lon));
dbl.add(Double.parseDouble(lat));
BasicDBObject query = new BasicDBObject("locs", new BasicDBObject("$near", dbl));
BasicDBObject filters = new BasicDBObject("_id", false);
DBCursor cursor = col.find(query, filters).skip(skip).limit(limit);
resp.getWriter().println(cursor.toArray().toString());
resp.getWriter().flush();
}catch(Exception ex){
resp.sendError(500,"internal server error");
return;
}
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { String uid = req.getParameter("uid");
String lon = req.getParameter("lon");
String lat = req.getParameter("lat");
if(uid == null || lon == null || lat == null){
resp.sendError(400,"bad request");
return;
}
try{
DB db=mongo.getDB(MongoDbName);
DBCollection col = db.getCollection("lbs_info"); BasicDBList dbl = new BasicDBList();
dbl.add(Double.parseDouble(lon));
dbl.add(Double.parseDouble(lat));
BasicDBObject query = new BasicDBObject("uid", uid);
DBObject setValue=new BasicDBObject();
setValue.put("utime", System.currentTimeMillis());
setValue.put("locs", dbl); DBObject upsertValue=new BasicDBObject("$set",setValue);
col.update(query, upsertValue, true, true);
resp.getWriter().println("ok");
resp.getWriter().flush();
}catch(Exception ex){
resp.sendError(500,"internal server error");
return;
}
}
}

3,使用示例

1,插入或更新数据
curl -XPOST -v "http://127.0.0.1:8080/lbs?uid=1001&lon=1&lat=1"
curl -XPOST -v "http://127.0.0.1:8080/lbs?uid=1002&lon=2&lat=2"
curl -XPOST -v "http://127.0.0.1:8080/lbs?uid=1003&lon=3&lat=3"
curl -XPOST -v "http://127.0.0.1:8080/lbs?uid=1004&lon=4&lat=4"
curl -XPOST -v "http://127.0.0.1:8080/lbs?uid=1005&lon=5&lat=5" 2,查询距离最近的数据
curl -XGET -v "http://127.0.0.1:8080/lbs?uid=1006&lon=3&lat=3
[{ "_id" : { "$oid" : "532786efb84743574afdd26f"} , "locs" : [ 3.0 , 3.0] , "uid" : "1003" , "utime" : 1395476404876}, { "_id" : { "$oid" : "532786e8b84743574afdd26e"} , "locs" : [ 2.0 , 2.0] , "uid" : "1002" , "utime" : 1395476397434}, { "_id" : { "$oid" : "532786f8b84743574afdd270"} , "locs" : [ 4.0 , 4.0] , "uid" : "1004" , "utime" : 1395476413299}, { "_id" : { "$oid" : "5327868db84743574afdd26d"} , "locs" : [ 1.0 , 1.0] , "uid" : "1001" , "utime" : 1395476436048}, { "_id" : { "$oid" : "5327885db84743574afdd271"} , "locs" : [ 6.0 , 6.0] , "uid" : "1006" , "utime" : 1395476769272}] 3,mongodb命令行查询
rs0:PRIMARY> db.lbs_info.find();
{ "_id" : ObjectId("5327868db84743574afdd26d"), "locs" : [ 1, 1 ], "uid" : "1001", "utime" : NumberLong("1395476436048") }
{ "_id" : ObjectId("532786e8b84743574afdd26e"), "locs" : [ 2, 2 ], "uid" : "1002", "utime" : NumberLong("1395476397434") }
{ "_id" : ObjectId("532786efb84743574afdd26f"), "locs" : [ 3, 3 ], "uid" : "1003", "utime" : NumberLong("1395476404876") }
{ "_id" : ObjectId("532786f8b84743574afdd270"), "locs" : [ 4, 4 ], "uid" : "1004", "utime" : NumberLong("1395476413299") }
{ "_id" : ObjectId("5327885db84743574afdd271"), "locs" : [ 6, 6 ], "uid" : "1006", "utime" : NumberLong("1395476769272") } rs0:PRIMARY> db.lbs_info.find( { locs : {$near:[0,0]}, uid: {$gt:"1001"}}).limit(3)
{ "_id" : ObjectId("532786e8b84743574afdd26e"), "locs" : [ 2, 2 ], "uid" : "1002", "utime" : NumberLong("1395476397434") }
{ "_id" : ObjectId("532786efb84743574afdd26f"), "locs" : [ 3, 3 ], "uid" : "1003", "utime" : NumberLong("1395476404876") }
{ "_id" : ObjectId("532786f8b84743574afdd270"), "locs" : [ 4, 4 ], "uid" : "1004", "utime" : NumberLong("1395476413299") }

使用mongodb存取lbs数据的更多相关文章

  1. 结合MongoDB开发LBS应用(转)

    原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...

  2. mongodb 物理删除数据

    刚开始用mongodb的时候,感觉很好用,速度很快,不过后面就遇到一个问题,数据物理内存一直增加,删除表也不管用. 然后网上找了各种办法,最后发现一个办法管用,就是物理删除存储数据. 操作如下: 1. ...

  3. MongoDB如何存储数据

    想要深入了解MongoDB如何存储数据之前,有一个概念必须清楚,那就是Memeory-Mapped Files. Memeory-Mapped Files 下图展示了数据库是如何跟底层系统打交道的. ...

  4. 使用highcharts显示mongodb中的数据

    1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...

  5. 如何将MongoDB数据库的数据迁移到MySQL数据库中

    FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...

  6. 使用 MongoDB 存储日志数据

    使用 MongoDB 存储日志数据     线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息.通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题 ...

  7. 使用vue-cli结合express获取mongodb里面的数据

    最近一直在看node有关的内容,空闲时间做了一个小小的爬虫,用于爬取电影天堂的数据然后写到mongodb里面,代码地址:https://github.com/fangming666/dianyingt ...

  8. MongoDB中的数据聚合工具Aggregate和Group

    周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...

  9. 百万级运维心得一:Mongodb和Redis数据不能放在同一个服务器

    百万级运维经验一:Mongodb和Redis数据不能放在同一个服务器 一开始时,为了省服务器,把Mongodb和Redis放在一个服务器上.网站每到高峰期都特别卡,还经常出现502.找了很久的原因,发 ...

随机推荐

  1. ROS中编辑文件命令行工具rosed

    rosed是rosbash套件中的一个,它允许我们通过包名直接编辑包中的文件,而不是输入包的全部路径. 用法: rosed [package_name] [filename] 例如: rosed ro ...

  2. font awesome使用笔记

    背景 今天将BS项目部署到IIS服务器上时.首次打开一个使用font awesome图标集的页面是加载非常慢. 于是果断按下F12查看具体页面的请求时常.除去其他异步数据的加载消耗时间以外.我居然看到 ...

  3. check the manual that corresponds to your MySQL server version for the right syntax的错误解析

    错误原因一:SQL关键字冲突 分析:例:把desc命名为字段名 错误原因二:$right=$DB->fetch_one_array("SELECT rsnumber FROM &quo ...

  4. jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性

    前言:在很多时候,我们需要文本框中显示默认值,获取焦点时,文字框中就会清空给的值,当失去焦点时,如果没有值,继续显示默认的文字,如果有输入值,就显示输入的值.现在项目中需要用到这个地方的功能比较多,于 ...

  5. java常用系统包介绍

    java.applet提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类.java.awt包含用于创建用户界面和绘制图形图像的所有类.java.awt.colo ...

  6. 12.06 JavaScript

    任务 掌握JavaScript基础知识,能够使用JavaScript编写一些复杂度不大的交互功能. 任务: JavaScript基础 做完任务一的时候深深地感觉到自己的基础非常的薄弱,在这里再次感谢一 ...

  7. Hadoop-04-HBase全然分布式环境搭建

    Hbase分布式具体安装步骤 Hadoop全然分布式环境已经搭建完毕(參见01_Hadoop全然分布式环境搭建). 注意:Hbase和Hadoop的版本号必须相应! 不然会出现各种问题! 这里选用的是 ...

  8. python闭包以及装饰器

    通俗的定义:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).它只不过是个“内层”的函数,由一个名字(变量)来指代,而这个名字(变 ...

  9. js获取智能机浏览器版本信息

    <!DOCTYPE html><html> <head>        <meta charset="UTF-8">         ...

  10. Objective-C继承

    继承只是想谈谈在OC中继承的理解:面向对象语言中一个主要的功能就是继承.继承可以使用现在类的所用功能,是对功能的扩展,通过继承创建的新类称为“子类”或“派生类”,被继承的称为“基类”或者“父类”.继承 ...