java 操作mongodb 类
package com.te.center;
import java.net.UnknownHostException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gson.Gson;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.WriteResult;
import com.te.pojo.Driver;
import com.te.pojo.User;
/**
*
* @author yqf
*
*/
public class TaxiCenter {
private TaxiCenter(){}
private static Mongo mg = null;
private static DB db;
private static DBCollection drivers;
private static DBCollection users;
private static TaxiCenter tc = new TaxiCenter();
/*private Map<String,Timestamp> driverMap = new HashMap<String,Timestamp>();
private Map<String,Timestamp> userMap = new HashMap<String,Timestamp>(); */
private static boolean isInit = false;
public static TaxiCenter getTaxiCenter(){
init();
return tc;
}
private static void init() {
if(isInit== false){
try {
mg = new Mongo();
//mg = new Mongo("localhost", 27017);
} catch (UnknownHostException e) {
e.fillInStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
//获取temp DB;如果默认没有创建,mongodb会自动创建
db = mg.getDB("te");
//获取users DBCollection;如果默认没有创建,mongodb会自动创建
drivers = db.getCollection("drivers");
users = db.getCollection("users");
//创建二维索引
drivers.createIndex(new BasicDBObject("loc", "2d"));
drivers.ensureIndex("driverID");
drivers.ensureIndex("TIME");
users.createIndex(new BasicDBObject("loc", "2d"));
users.ensureIndex("userID");
users.ensureIndex("TIME");
isInit = true;
}
}
// //乘客队列
// private List<User> passs = new ArrayList<User>();
// //司机队列
// private List<Driver> drvers = new ArrayList<Driver>();
// //对话 key:接收方 value 对话
// private HashMap<Object, ArrayList<Talking>> talks = new HashMap<Object,ArrayList<Talking>>();
/*public synchronized List<Talking> addOrGetTalk(int command,Object receive, Object send, Talking talk){
if(command==0){ //获取消息
//返回处理
if(talks.containsKey(send)){
ArrayList<Talking> ret = talks.get(send);
talks.remove(send);
return ret;
} else {
return new ArrayList<Talking>();
}
} else if(command == 1){ //对话
if(talks.containsKey(receive)){
ArrayList<Talking> list = talks.get(receive);
list.add(talk);
} else {
ArrayList<Talking> list = new ArrayList<Talking>();
list.add(talk);
talks.put(receive, list);
}
//返回处理
if(talks.containsKey(send)){
ArrayList<Talking> ret = talks.get(send);
talks.remove(send);
return ret;
} else {
return new ArrayList<Talking>();
}
} else {
return new ArrayList<Talking>();
}
}*/
/**
* 增加乘客
* @param pass
*/
public void addPass(User pass){
Gson gson = new Gson();
double[] tt = {Double.parseDouble(pass.getLat()), Double.parseDouble(pass.getLng())};
DBObject passObj = new BasicDBObject();
passObj.put("loc", tt);
passObj.put("USER", gson.toJson(pass));
passObj.put("userID", pass.getUserId());
Timestamp time = new java.sql.Timestamp(System.currentTimeMillis());
passObj.put("TIME", time);
DBObject query = new BasicDBObject();
query.put("userID", pass.getUserId());
users.findAndModify(query, null, null, false, passObj, false, true);
//userMap.put(pass.getUserId(), time);
/*query
查询过滤条件
{}
sort
如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作
{}
remove
若为true,被选中对象将在返回前被删除
N/A
update
一个 修改器对象
N/A
new
若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。
false
fields
参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert
创建新对象若查询结果为空。 示例 (1.5.4+)*/
}
public int removeUser(/*String userId*/Timestamp time){
DBObject passObj = new BasicDBObject();
DBObject qry = new BasicDBObject();
qry.put("$lt", time);
passObj.put("TIME", qry);
WriteResult rst = users.remove(passObj);
return rst.getN();
// userMap.remove(userId);
}
/**
* 增加司机
* @param pass
*/
public void addDriver(Driver driver){
DBObject passObj = new BasicDBObject();
double[] tt = {Double.parseDouble(driver.getLat()), Double.parseDouble(driver.getLng())};
passObj.put("loc", tt);
Gson gson = new Gson();
passObj.put("DRIVER", gson.toJson(driver));
passObj.put("driverID", driver.getPhoneid());
Timestamp time = new java.sql.Timestamp(System.currentTimeMillis());
passObj.put("TIME", time);
//drivers.save(passObj);
DBObject query = new BasicDBObject();
query.put("driverID", driver.getPhoneid());
drivers.findAndModify(query, null, null, false, passObj, false, true);
//driverMap.put(driver.getPhoneid(),new java.sql.Timestamp(System.currentTimeMillis()));
}
public int removeDriver(/*String driverId,*/Timestamp time){
DBObject passObj = new BasicDBObject();
// passObj.put("driverID", driverId);
DBObject qry = new BasicDBObject();
qry.put("$lt", time);
passObj.put("TIME", qry);
WriteResult rst = drivers.remove(passObj);
return rst.getN();
// driverMap.remove(driverId);
}
//查询乘客附近司机
public List<Driver> getDrivers(User user) {
List<Driver> retList = new ArrayList<Driver>();
DBObject src = new BasicDBObject();
double[] userLoc = {Double.parseDouble(user.getLat()), Double.parseDouble(user.getLng())};
src.put("$near", userLoc);
src.put("$maxDistance", 100); //默认100米
DBObject qry = new BasicDBObject();
qry.put("loc", src);
DBCursor c = drivers.find(qry);
Iterator itr = c.iterator();
Gson gson = new Gson();
while(itr.hasNext()){
DBObject obj = (DBObject)itr.next();
Driver driver = (Driver) (gson.fromJson((String)obj.get("DRIVER"), Driver.class));
retList.add(driver);
}
return retList;
}
//查询附近乘客
public List<User> getUsers(Driver driver) {
List<User> retList = new ArrayList<User>();
DBObject src = new BasicDBObject();
double[] userLoc = {Double.parseDouble(driver.getLat()), Double.parseDouble(driver.getLng())};
src.put("$near", userLoc);
src.put("$maxDistance", 100); //默认100米
DBObject qry = new BasicDBObject();
qry.put("loc", src);
DBCursor c = users.find(qry);
Iterator itr = c.iterator();
Gson gson = new Gson();
while(itr.hasNext()){
DBObject obj = (DBObject)itr.next();
User user = (User)gson.fromJson((String)obj.get("USER"), User.class);
retList.add(user);
}
return retList;
}
/*public Map<String, Timestamp> getDriverMap() {
return driverMap;
}
public Map<String, Timestamp> getUserMap() {
return userMap;
}*/
}
分享到:
相关推荐
### MongoDB Java 使用文档知识点概述 #### 一、MongoDB 的安装与配置 ##### Windows 下的安装与配置 1. **下载 MongoDB**: - 访问 MongoDB 官方网站:[http://www.mongodb.org/](http://www.mongodb.org/)。 ...
在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在运行的MongoDB服务器兼容。 1. MongoDB驱动介绍: MongoDB提供了多种语言的驱动程序,Java驱动是其中之一。它基于Java 6及更高版本,实现了...
为了方便开发者使用 Java 进行开发,MongoDB 提供了官方的 Java 驱动程序(MongoDB Java Driver),使得 Java 应用能够轻松地与 MongoDB 数据库进行交互。 #### 二、基本概念与连接 在开始使用 MongoDB Java Driver...
在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互。本篇将详细介绍如何使用Java连接MongoDB,以及进行基本的数据操作:创建集合、添加文档、修改文档、查询文档和删除文档。 首先,为了连接MongoDB,...
### MongoDB Java API 使用详解 #### 一、Java 驱动简介与一致性 MongoDB 的 Java 驱动是线程安全的,适用于大多数应用程序场景。通常情况下,只需要创建一个 `Mongo` 实例即可,因为它内部包含了一个连接池(默认...
6. **查询和过滤**:MongoDB Java驱动支持灵活的查询语法,允许你使用各种条件进行数据筛选。这包括基本的比较操作符(如$eq, $gt, $lt等)、逻辑操作符(如$and, $or)以及更复杂的聚合管道操作。 7. **索引**:...
在这个“MongoDB之Java使用例子”中,我们将深入探讨如何在Java环境中操作MongoDB数据库,包括增、删、改、查(CRUD)操作以及图像数据的存储和检索。 首先,Java与MongoDB的交互主要通过MongoDB的Java驱动程序实现...
为了更好地理解和使用MongoDB Java驱动程序,建议参考官方文档和社区资源,如CSDN上的博客(如链接所示),以及Stack Overflow等平台上的讨论。同时,不断学习和实践,以适应不断发展的MongoDB和Java技术栈。
在Java开发中,与MongoDB交互通常需要使用官方提供的Java驱动程序。本篇文章将详细介绍“mongodb java驱动支持jar”及其源码,帮助开发者更好地理解和使用这些资源。 首先,`mongo-java-driver-3.8.0.jar`是MongoDB...
在Java开发中,我们可以使用MongoDB的Java驱动程序来实现对MongoDB数据库的增、删、改、查(CRUD)操作。以下是对这些核心功能的详细说明。 1. **增加(Create)** 要在MongoDB中插入数据,我们需要使用`...
本资料包“MongoDB Java操作大全 源代码 实例”将深入探讨如何使用Java API进行MongoDB的操作。 1. **连接MongoDB** 在Java中,首先需要通过`MongoClient`类建立到MongoDB服务器的连接。例如: ```java ...
目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中找到对应的依赖,例如: ```xml <groupId>org.mongodb <artifactId>mongodb-driver-sync <version>4.3.0 ``` 接下来,我们需要配置MongoDB...
在实际开发中,使用MongoDB Java Driver 2.11时,首先需要在项目中添加对应的依赖,例如在Maven项目中,可以在pom.xml文件中加入如下配置: ```xml <groupId>org.mongodb <artifactId>mongo-java-driver ...
mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动
8. **异步编程支持**:从3.x版本开始,MongoDB Java驱动程序引入了异步API,使用`MongoAsyncClient`和`MongoAsyncDatabase`,这使得在高并发环境中性能更优。 9. **安全认证**:MongoDB支持多种身份验证机制,如...
本篇将深入探讨"mongodb_java_2.6_API",即MongoDB 2.6版本的Java驱动程序API,了解如何使用Java进行MongoDB的开发。 1. **MongoDB Java驱动程序概述** MongoDB的Java驱动程序是Java开发者与MongoDB服务器通信的...
在本文中,我们将深入探讨如何使用Java连接MongoDB,涉及的知识点包括MongoDB Java驱动程序的安装、配置,以及基本的连接和操作数据库的方法。 首先,我们来看“java连接mongodb的jar包”。这个“mongodbjar”通常...
mongodb Java连接池配置 用于避免Java连接mongodb数据库数过高引起的一系列问题
在这个压缩包中,你将找到专为Windows 64位系统优化的MongoDB安装程序,以及Java API的文档,这对于使用Java进行MongoDB集成开发的开发者来说极其重要。 MongoDB的安装过程: 1. **下载与解压**:首先,你需要下载...