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 Java操作大全 源代码 实例
MongoDBjava各版本驱动下载
MongoDB Java Driver 简单操作
MongoDB Java API 中文
mongoDB java driver api mongoDB java 驱动 所有类的api
MongoDB java API实现增删改查,包含批量操作
mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动 mongoDB java 驱动
mongodb Java连接池配置 用于避免Java连接mongodb数据库数过高引起的一系列问题
MongoDB之Java使用例子,详细的增删改查例子,以及图片保存删除查询等~
mongodb-java-driver-4.4.0.jar
mongodb java Driver,具体使用请看我的博客:http://blog.csdn.net/lablenet
MongoDB应用 Java应用 纯java mongodb操作 mongodb 通用dao
Mongodb java 例子
mongodb for java api 英文版
MongoDB for Java Developers Design, build, and deliver efficient Java applications using the most advanced NoSQL database
MongoDB Java获取集合.pdf 学习资料 复习资料 教学资源
MongoDB入门教程 + 架构简析 + java使用MongoDB的简单程序
mongodb java驱动包3.2.1版本
MongoDB Java查找文档.pdf 学习资料 复习资料 教学资源