Java操作MongoDB

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

程序员特点,没有废话,直接上代码:
Java代码  收藏代码
  1. publicclass Test2 {  

  2. @Test

  3. publicvoid setDBData(){  

  4. // 连接本地数据库  

  5. try {  

  6.            Mongo m = new Mongo( "localhost" , 27017 );  

  7. //创建名为test_db的数据库  

  8.            DB db = m.getDB("test_db");    

  9. //获取test_table中的集合(类似于获取关系数据库中的表)  

  10.            Set<String> cols = db.getCollectionNames();    

  11. //创建一个叫做"test_table"的集合  

  12.            DBCollection collection = db.getCollection("test_table");  

  13. for(int i=0;i<100;i++){  

  14. //基本DB对象,最终插入数据库的就是这个DB对象  

  15.                BasicDBObject obj = new BasicDBObject();    

  16.                obj.put("id", i);  

  17.                obj.put("fid", i%30);  

  18.                obj.put("uid", "name"+i%60);  

  19.                obj.put("groupid", i%40);  

  20.                obj.put("ip", "192.168.0."+(i+1)%40);  

  21.                obj.put("regTime", new Date());  

  22.                collection.insert(obj);  

  23.            }  

  24.        } catch (Exception e) {  

  25.            e.printStackTrace();  

  26.        }  

  27.    }  

  28. @Test

  29. publicvoid getDBData(){  

  30. // 连接本地数据库  

  31. try {  

  32.            Mongo m = new Mongo( "localhost" , 27017 );  

  33. //创建名为test_db的数据库  

  34.            DB db = m.getDB("test_db");    

  35. //创建一个叫做"test_table"的集合  

  36.            DBCollection collection = db.getCollection("test_table");  

  37. //排序 1为升序  -1为降序

  38.            DBCursor cursor=collection.find().sort(new BasicDBObject("id",-1));   //排序 1为升序  -1为降序

  39. //DBCursor cursor=collection.find().limit(10);   //只取前十个

  40. //DBCursor cursor=collection.find().skip(10); //取前十个记录之后的

  41. //collection.find().count()  ;  //总记录数

  42. //select * from test_table where id>=10 and id<30  注:$gt=(>)  $gte=(>=)  $lt=(<) $lte=(<=)  $ne=(!=)

  43. //DBCursor cursor = collection.find(new BasicDBObject("id",new BasicDBObject("$lt", 30).append("$gte", 10)));

  44. /**

  45.            //select * form table where id in (1,12,23)

  46.            int [] strs = new int[3];  //其实也可以放在List里面

  47.            strs[0] = 1;

  48.            strs[1] = 12;

  49.            strs[2] = 23;

  50.            DBCursor cursor=collection.find(new BasicDBObject("id",new BasicDBObject("$in",strs)));

  51.            */

  52. /**查询特定字段

  53.            DBObject query = new BasicDBObject();//要查的条件

  54.            query.put("uid", "name10");

  55.            DBObject field = new BasicDBObject();//要查的哪些字段

  56.            field.put("id", true);

  57.            field.put("fid", true);

  58.            field.put("ip", true);

  59.            DBCursor cursor=collection.find(query,field);

  60.            */

  61. while(cursor.hasNext()){    

  62.                System.out.println(cursor.next());    

  63.            }    

  64. /** select distinct("uid") from table

  65.             * 注意:distinct("uid")这个字段是什么类型,list.get(i)就是什么类型

  66.            List list=(List) collection.distinct("uid");

  67.            for(int i=0;i<list.size();i++){

  68.                System.out.println(list.get(i));

  69.            }

  70.            */

  71. /**按照groupid分组,并且分组后计算fid的sum

  72.            //select groupid ,sum(fid) fidCount form  table group by groupid

  73.            //key是group by 的字段

  74.            BasicDBObject key = new BasicDBObject();

  75.            key.put("groupid", true);

  76.            //cond是where的条件 可以为空

  77.            BasicDBObject cond = new BasicDBObject();

  78.            //initial是字段sum的初始值

  79.            BasicDBObject initial = new BasicDBObject();

  80.            initial.put("fidCount", 0);

  81.            //reduce是分解归纳求和 fid的sum

  82.            String reduce = "function(obj,prev) { prev.fidCount +=obj.fid; }";

  83.            DBObject obj = collection.group(key, cond, initial, reduce);

  84.            Set set = obj.keySet();

  85.            Iterator it = set.iterator();

  86.            int i=0;

  87.            while(it.hasNext()){

  88.                String str_key = (String) it.next();

  89.                System.out.println(obj.get(str_key));

  90.                i++;

  91.            }

  92.            */

  93.        } catch (Exception e) {  

  94.            e.printStackTrace();  

  95.        }  

  96.    }  

  97. @Test

  98. publicvoid deleteTable(){  

  99. try {  

  100.            Mongo m = new Mongo( "localhost" , 27017 );  

  101. //创建名为test_db的数据库  

  102.            DB db = m.getDB("test_db");  

  103. //db.dropDatabase();  //删除数据库

  104.            DBCollection collection = db.getCollection("test_table");  

  105. //collection.drop();  //删除表

  106.            collection.remove(new BasicDBObject()); //清空表数据

  107.        } catch (Exception e) {  

  108. // TODO Auto-generated catch block

  109.            e.printStackTrace();  

  110.        }    

  111.    }  

  112. @Test

  113. publicvoid findDataByParams(){  

  114. try {  

  115.            Mongo m = new Mongo( "localhost" , 27017 );  

  116. //创建名为test_db的数据库  

  117.            DB db = m.getDB("test_db");  

  118.            DBCollection collection = db.getCollection("test_table");  

  119.            DBObject obj = new BasicDBObject();  

  120. //select ip,groupid form table where uid=name1

  121.            obj.put("uid", "name1");  

  122.            DBCursor cursor=collection.find(obj,new BasicDBObject("ip",1).append("groupid", 1));    

  123. while(cursor.hasNext()){    

  124.                System.out.println(cursor.next());    

  125.            }    

  126.        } catch (Exception e) {  

  127. // TODO Auto-generated catch block

  128.            e.printStackTrace();  

  129.        }    

  130.    }  

  131. @Test

  132. publicvoid updateData(){  

  133. try {  

  134.            Mongo m = new Mongo( "localhost" , 27017 );  

  135. //创建名为test_db的数据库  

  136.            DB db = m.getDB("test_db");  

  137.            DBCollection collection = db.getCollection("test_table");  

  138. /**  以下是用findAndModify方法更改数据

  139.            DBObject obj = new BasicDBObject();

  140.            obj.put("uid", "name59");

  141.            DBObject obj2 = new BasicDBObject();

  142.            obj2.put("ip", "111.111.111.333");

  143.            //UPDATE test_table  SET ip = 111.111.111.333 WHERE uid=name59;  

  144.            DBObject objOld = collection.findAndModify(obj, new BasicDBObject("$set",obj2));

  145.            System.out.println("objOld==="+objOld);  

  146.            //这里,findAndModify方法执行后,返回的DBObject内容还是旧的内容,但是数据库里的记录已经改为了新的记录

  147.            //如下:

  148.            DBCursor cursor= collection.find(obj);

  149.            while(cursor.hasNext()){  

  150.                System.out.println("objNew=="+cursor.next());  

  151.            }

  152.            */

  153. // 以下是用update方法更改数据  注:findOne是返回满足条件的第一个记录

  154. // UPDATE test_table  SET ip = 100.100.100.333 WHERE uid=name59;  

  155.            DBObject obj = new BasicDBObject();  

  156.            obj.put("uid", "name59");  

  157.            DBObject obj2 = collection.findOne(obj);  

  158.            obj2.put("ip", "100.100.100.333");  

  159.            collection.update(obj, obj2);  

  160.            System.out.println("==="+collection.findOne(obj));    

  161.        } catch (Exception e) {  

  162. // TODO Auto-generated catch block

  163.            e.printStackTrace();  

  164.        }    

  165.    }  

  166. @Test

  167. publicvoid deleteData(){  

  168. try {  

  169.            Mongo m = new Mongo( "localhost" , 27017 );  

  170. //创建名为test_db的数据库  

  171.            DB db = m.getDB("test_db");  

  172.            DBCollection collection = db.getCollection("test_table");  

  173.            DBObject obj = new BasicDBObject();  

  174.            obj.put("uid", "name59");  

  175. //删除数据

  176.            collection.remove(obj);    

  177.            getDBData();  

  178.        } catch (Exception e) {  

  179. // TODO Auto-generated catch block

  180.            e.printStackTrace();  

  181.        }    

  182.    }  

  183. }  



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

Ref: http://jzkangta.iteye.com/blog/1018685

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章