`
jzkangta
  • 浏览: 156991 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java操作mongoDB

    博客分类:
  • JAVA
阅读更多
这段时间一直在研究mongoDB,由于资料很少,网上的又都是互相抄袭,真正学到的不多。官方文档对我来说又很难看懂,总之我是看的都想放弃了的。
但还好坚持了下来,现在把学习的心得记录一下。

程序员特点,没有废话,直接上代码:
public class Test2 {

	@Test
	public void setDBData(){
		// 连接本地数据库   
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
	        DB db = m.getDB("test_db");  
	        //获取test_table中的集合(类似于获取关系数据库中的表)   
	        Set<String> cols = db.getCollectionNames();   
	        //创建一个叫做"test_table"的集合   
	        DBCollection collection = db.getCollection("test_table");
	        for(int i=0;i<100;i++){
	        	 //基本DB对象,最终插入数据库的就是这个DB对象   
		        BasicDBObject obj = new BasicDBObject();  
		        obj.put("id", i);
		        obj.put("fid", i%30);
		        obj.put("uid", "name"+i%60);
		        obj.put("groupid", i%40);
		        obj.put("ip", "192.168.0."+(i+1)%40);
		        obj.put("regTime", new Date());
		        collection.insert(obj);
	        }
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void getDBData(){
		// 连接本地数据库   
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
	        DB db = m.getDB("test_db");  
	        //创建一个叫做"test_table"的集合   
	        DBCollection collection = db.getCollection("test_table");
	        //排序 1为升序  -1为降序
			DBCursor cursor=collection.find().sort(new BasicDBObject("id",-1));   //排序 1为升序  -1为降序
			//DBCursor cursor=collection.find().limit(10);   //只取前十个
	        //DBCursor cursor=collection.find().skip(10); //取前十个记录之后的
	        //collection.find().count()  ;  //总记录数
	        //select * from test_table where id>=10 and id<30  注:$gt=(>)  $gte=(>=)  $lt=(<) $lte=(<=)  $ne=(!=)
	        //DBCursor cursor = collection.find(new BasicDBObject("id",new BasicDBObject("$lt", 30).append("$gte", 10)));
			/**
			//select * form table where id in (1,12,23)
			int [] strs = new int[3];  //其实也可以放在List里面
			strs[0] = 1;
			strs[1] = 12;
			strs[2] = 23;
			DBCursor cursor=collection.find(new BasicDBObject("id",new BasicDBObject("$in",strs)));
			*/
			
	        /**查询特定字段
	        DBObject query = new BasicDBObject();//要查的条件
	        query.put("uid", "name10");
	        DBObject field = new BasicDBObject();//要查的哪些字段
	        field.put("id", true);
	        field.put("fid", true);
	        field.put("ip", true);
	        DBCursor cursor=collection.find(query,field);
	        */
								

			while(cursor.hasNext()){   
		        System.out.println(cursor.next());   
		    }   
	        /** select distinct("uid") from table
	         * 注意:distinct("uid")这个字段是什么类型,list.get(i)就是什么类型
			List list=(List) collection.distinct("uid");
			for(int i=0;i<list.size();i++){
				System.out.println(list.get(i));
			}
			*/
	        
			/**按照groupid分组,并且分组后计算fid的sum
			//select groupid ,sum(fid) fidCount form  table group by groupid
	        //key是group by 的字段
	        BasicDBObject key = new BasicDBObject();
	        key.put("groupid", true);
	        
	        //cond是where的条件 可以为空
	        BasicDBObject cond = new BasicDBObject();
	        
	        //initial是字段sum的初始值
	        BasicDBObject initial = new BasicDBObject();
	        initial.put("fidCount", 0);
	        
	        //reduce是分解归纳求和 fid的sum
	        String reduce = "function(obj,prev) { prev.fidCount +=obj.fid; }";

	        DBObject obj = collection.group(key, cond, initial, reduce);
	        Set set = obj.keySet();
	        Iterator it = set.iterator();
	        int i=0;
	        while(it.hasNext()){
	        	String str_key = (String) it.next();
	        	System.out.println(obj.get(str_key));
	        	i++;
	        }
			*/
			
	        
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void deleteTable(){
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
			DB db = m.getDB("test_db");
			//db.dropDatabase();  //删除数据库
			DBCollection collection = db.getCollection("test_table");
			//collection.drop();  //删除表
			collection.remove(new BasicDBObject()); //清空表数据
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	}
	
	@Test
	public void findDataByParams(){
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
			DB db = m.getDB("test_db");
			DBCollection collection = db.getCollection("test_table");
			DBObject obj = new BasicDBObject();
			//select ip,groupid form table where uid=name1
			obj.put("uid", "name1");
			DBCursor cursor=collection.find(obj,new BasicDBObject("ip",1).append("groupid", 1));  
			while(cursor.hasNext()){   
		        System.out.println(cursor.next());   
		    }  
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	}
	
	@Test
	public void updateData(){
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
			DB db = m.getDB("test_db");
			DBCollection collection = db.getCollection("test_table");
			/**  以下是用findAndModify方法更改数据
			DBObject obj = new BasicDBObject();
			obj.put("uid", "name59");
			DBObject obj2 = new BasicDBObject();
			obj2.put("ip", "111.111.111.333");
			//UPDATE test_table  SET ip = 111.111.111.333 WHERE uid=name59;  
			DBObject objOld = collection.findAndModify(obj, new BasicDBObject("$set",obj2));
			System.out.println("objOld==="+objOld);   
			//这里,findAndModify方法执行后,返回的DBObject内容还是旧的内容,但是数据库里的记录已经改为了新的记录
			//如下:
			DBCursor cursor= collection.find(obj);
			while(cursor.hasNext()){   
		        System.out.println("objNew=="+cursor.next());   
		    } 
		    */
			
			// 以下是用update方法更改数据  注:findOne是返回满足条件的第一个记录
			// UPDATE test_table  SET ip = 100.100.100.333 WHERE uid=name59;  
			DBObject obj = new BasicDBObject();
			obj.put("uid", "name59");
			DBObject obj2 = collection.findOne(obj);
			obj2.put("ip", "100.100.100.333");
			collection.update(obj, obj2);
			System.out.println("==="+collection.findOne(obj));   
		
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	}
	
	@Test
	public void deleteData(){
		try {
			Mongo m = new Mongo( "localhost" , 27017 );
			//创建名为test_db的数据库   
			DB db = m.getDB("test_db");
			DBCollection collection = db.getCollection("test_table");
			DBObject obj = new BasicDBObject();
			obj.put("uid", "name59");
			//删除数据
			collection.remove(obj);  
			getDBData();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
	}
	
}


以上对mongodb的基本操作应该够用,现在还有弄不明白的就是它的模糊查询和MapReduce的用法,模糊查询只知道是用正则来实现。
以后有空再细细摸索一下吧
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics