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

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