日期:2014-05-16  浏览次数:20510 次

mongodb java使用
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