MongDB基礎學習(七)—— 【MongoDB for Java】Java操作MongoDB,mongdbmongodb

來源:互聯網
上載者:User

MongDB基礎學習(七)—— 【MongoDB for Java】Java操作MongoDB,mongdbmongodb

【MongoDB for Java】Java操作MongoDB

       開發的產品為了融資,不停得改版,從第一版到現在最新版本,最後發現公司發展方向都變了,有最初電子商務改成VR內容提供者(沒辦法,要別人錢,就得按照別人的規劃的戰略走)。本來本章節會放到後面再做講解,無奈,部門需要做一次培訓任務,我就想到拿Java操作MongoDB作為培訓內容,開發環境和依賴jar如下:

  (1)開發環境:

System:Windows

IDE:eclipse

Database:mongoDB2.6

Maven:apache-maven-3.0.4

  (2)開發依賴庫:

JavaEE7、mongo-2.6.5.jar、junit-4.11.jar

一、準備工作

        1、 首先,下載mongoDB對Java支援的驅動包(我是直接拿maven下載的,文章最後我也會把相應的mongo-2.6.5.jar上傳。

MongoDBfor Java的API文檔地址為:http://api.mongodb.org/java/2.6.5/

MongoDB for Java相關的操作執行個體代碼:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/

我這裡建立的是Maven工程,其pom檔案內容如下:

<span style="font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hth</groupId><artifactId>mongodb</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>mongodb Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>2.6.5</version></dependency></dependencies><build><finalName>mongodb</finalName></build></project></span>

     如果你的開發環境沒有安裝maven環境,你可以建立一個JavaProject工程,匯入MongoDB的驅動jar包,即可在Java中使用mongoDB,

二、Java操作MongoDB樣本

     在本樣本之前你需要啟動mongoDB的服務,啟動後,下面的程式才能順利執行;

   1、 建立MongoDBDemo.java,完成簡單的mongoDB資料庫操作       

               Mongomongo = new Mongo();

          這樣就建立了一個MongoDB的資料庫連接對象,它預設串連到當前機器的localhost地址,連接埠是27017。

               DB db = mongo.getDB(“test”);

         這樣就獲得了一個test的資料庫(為mongoDB的預設的資料庫),如果mongoDB中沒有建立這個資料庫也是可以正常啟動並執行。得到了db,下一步我們要擷取一個“聚集集合DBCollection”,通過db對象的getCollection方法來完成。

             DBCollection users = db.getCollection("users");

        這樣就獲得了一個DBCollection,它相當於我們資料庫的“表”,在MongoDB中叫做集合。

       查詢所有資料

          DBCursor cur = users.find();

          while (cur.hasNext()) {

                 System.out.println(cur.next());

          }

完整源碼

<span style="font-size:18px;">package com.hth.mongodb;import java.net.UnknownHostException;import java.util.Iterator;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.Mongo;import com.mongodb.MongoException;import com.mongodb.util.JSON;/** * @ClassName: MongoDBDemo * @Description: TODO(MongoDB測試) * @author wangzhao date 2015年2月11日 下午3:56:16 *  */public class MongoDBDemo {public static void main(String[] args) throws UnknownHostException,MongoException {Mongo mongo = new Mongo("192.168.26.190", 27017);for (String dbName : mongo.getDatabaseNames()) {System.out.println("資料庫執行個體:" + dbName);}DB db = mongo.getDB("dreamerkr");for (String cName : db.getCollectionNames()) {System.out.println("dreamerkr存在的集合:" + cName);}DBCollection webInfo = db.getCollection("web_info");DBCursor dbCursor = webInfo.find();while (dbCursor.hasNext()) {System.out.println("每個文檔資料為:" + dbCursor.next());}for (Iterator it = dbCursor.iterator(); it.hasNext();) {System.out.println("每個文檔資料為:" + it.next());}System.out.println("文檔個數為:" + dbCursor.count());System.out.println("序列化此文檔"+JSON.serialize(dbCursor));}}</span>

2、 完成CRUD操作,首先建立一個MongoDBCRUDTest.java,基本測試代碼如下:

<span style="font-size:18px;">package com.hth.mongodb;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import org.bson.types.ObjectId;import org.junit.After;import org.junit.Before;import org.junit.Test;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.QueryOperators;/** * @ClassName: MongoDBCRUDTest * @Description: TODO(MongoDB測試) * @author wangzhao date 2015年2月11日 下午5:56:16 *  */public class MongoDBCRUDTest {     private Mongo mg = null;     private DB db;     private DBCollection webInfos;     @Before     public void init() {          try {               mg = new Mongo("192.168.26.190", 27017);          } catch (UnknownHostException e) {               e.printStackTrace();          } catch (MongoException e) {               e.printStackTrace();          }          // 擷取dreamerkr DB;如果預設沒有建立,mongodb會自動建立          db = mg.getDB("dreamerkr");          // 擷取web_info DBCollection;如果預設沒有建立,mongodb會自動建立          webInfos = db.getCollection("web_info");     }     @After     public void destory() {          if (mg != null) {               mg.close();          }          mg = null;          db = null;          webInfos = null;     }     public void print(Object o) {          System.out.println(o);     }     /**      * 1.queryAll(使用MongoDB的api查詢所有資料).      */     @Test     public void queryAll() {          print("查詢webInfos的所有資料:");          // db遊標          DBCursor cur = webInfos.find();          while (cur.hasNext()) {               print(cur.next());          }     }          /**      * add(插入一個對象).      */     @Test     public void addObject() {          // 先查詢所有資料          queryAll();          print("count: " + webInfos.count());          DBObject webInfo = new BasicDBObject();          webInfo.put("name", "追夢客");          webInfo.put("address", "http://www.dreamerkr.com");          // webInfos.save(webInfo)儲存,getN()擷取影響行數          print(webInfos.save(webInfo).getN());          // 查詢下資料,看看是否添加成功         print("count: " + webInfos.count());          queryAll();     }     /**      * add(插入一個List).      */     @Test     public void addList() {          queryAll();          print("count: " + webInfos.count());          DBObject webInfo = new BasicDBObject();                     List<DBObject> list = new ArrayList<DBObject>();          webInfo.put("name", "追夢客");                    webInfo.put("address", "http://www.dreamerkr.com");                    webInfo.put("age", 2);                    list.add(webInfo);                    DBObject webInfo2 = new BasicDBObject("name", "追夢客2");                    webInfo2.put("address", "www.hth.tv");                    webInfo2.put("age", 1);                    list.add(webInfo2);          webInfos.insert(list);                    // 查詢下資料,看看是否添加成功          print("count: " + webInfos.count());                    queryAll();     }     /**      * add(插入一個數組).      */     @Test     public void addArray() {          queryAll();          print("count: " + webInfos.count());          DBObject webInfo = new BasicDBObject();          webInfo.put("name", "追夢客");          webInfo.put("address", "http://www.dreamerkr.com");          // 添加多條資料,傳遞Array對象         webInfos.insert(webInfo, new BasicDBObject("name", "雨打排行"));          print("count: " + webInfos.count());          queryAll();     }               /**      *       * remove( 刪除資料).      */     @Test     public void remove() {          queryAll();          print("刪除id = 54dc0cc3c50afa2987800aff:"                    + webInfos.remove(new BasicDBObject("_id", new ObjectId(                                        "54dc0cc3c50afa2987800aff"))).getN());          print("remove name = 追夢客2: "                    + webInfos                              .remove(new BasicDBObject("name", "追夢客2")).getN());                    print("remove age > 1: "                  + webInfos                            .remove(new BasicDBObject("age", new BasicDBObject("$gt", 1))).getN());     }     /**      *       * modify(修改資料).      */     @Test     public void modify() {                queryAll();               print("修改:"                    + webInfos.update(                              new BasicDBObject("_id", new ObjectId(                                        "54dc0808c50a5945720b1724")),                              new BasicDBObject("name", "雨打排行2")).getN());          print("修改:" + webInfos.update(new BasicDBObject("_id",           new ObjectId("54dc130fc50a1c2e75e2b060")), new BasicDBObject("age", 122),          true,// 如果資料庫不存在,是否添加          false //false只修改第一條,管理api上面說為true時是刪掉多條,測試結果是多條資料不修改,感覺很奇怪,知道的朋友,請給我解釋一下,謝謝          ).getN());          // 當資料庫不存在就不修改、不添加資料,當多條資料就不修改(通用的原因,知道的朋友,請給我解釋一下,謝謝)           print("修改多條:" + webInfos.updateMulti(new BasicDBObject("name", "追夢客"), new BasicDBObject("name",                 "追夢客")).getN());                    queryAll();     }     /**      *       * query( 查詢資料).      */     @Test     public void query() {          // 查詢id = 54dc130fc50a1c2e75e2b05c          print("find id = 54dc130fc50a1c2e75e2b05c: "                    + webInfos.find(                              new BasicDBObject("_id", new ObjectId(                                        "54dc130fc50a1c2e75e2b05c"))).toArray());          // 查詢age = 122          print("find age = 122: "                    + webInfos.find(new BasicDBObject("age", 122)).toArray());          // 查詢age >= 1          print("find age >= 1: "                    + webInfos                              .find(new BasicDBObject("age", new BasicDBObject(                                        "$gte", 1))).toArray());          print("find age <= 2: "                    + webInfos                              .find(new BasicDBObject("age", new BasicDBObject(                                        "$lte", 2))).toArray());          print("查詢age!=3:"                    + webInfos.find(                              new BasicDBObject("age", new BasicDBObject("$ne", 3)))                              .toArray());          print("查詢age in 1/122:"                    + webInfos.find(                              new BasicDBObject("age", new BasicDBObject(                                        QueryOperators.IN, new int[] { 1, 122})))                              .toArray());          print("查詢age not in 1/2/122:"                    + webInfos.find(                              new BasicDBObject("age", new BasicDBObject(                                        QueryOperators.NIN, new int[] { 1, 2, 122 })))                              .toArray());          print("查詢age exists 排序:"                    + webInfos.find(                              new BasicDBObject("age", new BasicDBObject(                                        QueryOperators.EXISTS, true))).toArray());          print("只查詢age屬性:"                    + webInfos.find(null, new BasicDBObject("age", true)).toArray());          // 只查詢一條資料,多條去第一條          print("findOne: " + webInfos.findOne());          print("findOne: " + webInfos.findOne(new BasicDBObject("age", 1)));          print("findOne: "                    + webInfos.findOne(new BasicDBObject("age", 1),                              new BasicDBObject("name", true)));          // 查詢修改、刪除          print("findAndRemove 查詢age=2的資料,並且刪除: "                    + webInfos.findAndRemove(new BasicDBObject("age", 2)));          // 查詢age=1的資料,並且修改name的值為好童話          print("findAndModify: "                    + webInfos.findAndModify(new BasicDBObject("age", 1),                              new BasicDBObject("name", "好童話")));          queryAll();     }}</span>
       好了,這裡基本上就介紹這麼多Java操作MongoDB的方法。其他的東西還需要你自己多多研究。上面操作MongoDB的方法都是一些常用的方法,比較簡單。如果有什麼問題,可以給我留言,謝謝!

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.