學習MongoDB-應用舉例(利用java操作MongoDB)


Java驅動程序是MongoDB最早的驅動,已用於生產環境很長時間,十分穩定。可以到MongoDB官方網站下載驅動,驅動版本為2.9.0。

這個jar文件中,有兩個包,我們會經常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各種概念和shell中類似,幾乎所有的方法名也都一致,我們先看個簡單的例子吧:

 

    package cn.test;  
      
    import java.net.UnknownHostException;  
      
    import com.mongodb.BasicDBObject;  
    import com.mongodb.DB;  
    import com.mongodb.DBCollection;  
    import com.mongodb.DBObject;  
    import com.mongodb.Mongo;  
      
    public class Test {  
      
        public static void main(String[] args) throws UnknownHostException {  
              
            /** 
             * Mongo類代表與MongoDB服務器的連接,有多種構造函數。無參構造函數默認連接localhost:27017. 
             */  
            Mongo connection = new Mongo("localhost:20000");  
            /** 
             * DB類代表數據庫,如果當前服務器上沒有該數據庫,會默認創建一個 
             */  
            DB db = connection.getDB("mylearndb");  
            /** 
             * DBCollection代表集合,如果數據庫中沒有該集合,會默認創建一個 
             */  
            DBCollection users = db.getCollection("users");  
            /** 
             * DBObject代表文檔,這是一個接口,java中提供了多種實現,最簡單的就是BasicDBObject了 
             */  
            DBObject user = new BasicDBObject();  
            user.put("name", "jimmy");  
            user.put("age", "34");  
            DBObject address = new BasicDBObject();  
            address.put("city", "bj");  
            address.put("street", "bq road");  
            address.put("mail", "ufpark 68#");  
            /** 
             * 對於內嵌文檔,我們需要先將內嵌文檔填充后,再填充到外層文檔中! 
             */  
            user.put("address", address);  
            // 將該文檔插入到集合中  
            users.insert(user);  
            // 從集合中查詢數據,我們就查詢一條,調用findOne即可  
            DBObject dbUser = users.findOne();  
            System.out.println("name" + " : "  + dbUser.get("name") );  
            System.out.println("age" + " : "  + dbUser.get("age") );  
            DBObject dbAddress = (DBObject)user.get("address");  
            System.out.println("city" + " : "  + dbAddress.get("city") );  
            System.out.println("street" + " : "  + dbAddress.get("street") );  
            System.out.println("mail" + " : "  + dbAddress.get("mail") );  
              
        }  
      
    }  

 

輸出結果為:

    name : jimmy  
    age : 34  
    city : bj  
    street : bq road  
    mail : ufpark 68#  

從上述例子,我們可以看出,利用Java驅動操作MongoDB和shell中操作方式是十分相似的。

我們這里稍微提一下上面注釋中,解釋的文檔類。Java驅動中文檔必須是DBObject接口類型,這個接口可以認為是一個有序地java.util.Map。Java驅動中有提供了很多實現,我們上例中采用了最簡單的BasicDBObject。

【向集合中保存數組】

MongoDB集合中的鍵值對的值支持數組,在shell中,我們通過[],來表示數組,那Java驅動中如何表示數組呢?在Java驅動中,java.util.List類型的對象,都可以表示MongoDB中的數組!我們看一個例子:

 

 1     package cn.test;  
 2       
 3     import java.net.UnknownHostException;  
 4     import java.util.ArrayList;  
 5     import java.util.List;  
 6       
 7     import com.mongodb.BasicDBObject;  
 8     import com.mongodb.BasicDBObjectBuilder;  
 9     import com.mongodb.DB;  
10     import com.mongodb.DBCollection;  
11     import com.mongodb.DBObject;  
12     import com.mongodb.Mongo;  
13       
14     public class Test1 {  
15       
16         public static void main(String[] args) throws UnknownHostException {  
17               
18             /** 
19              * Mongo類代表與MongoDB服務器的連接,有多種構造函數。無參構造函數默認連接localhost:27017. 
20              */  
21             Mongo connection = new Mongo("localhost:20000");  
22             /** 
23              * DB類代表數據庫,如果當前服務器上沒有該數據庫,會默認創建一個 
24              */  
25             DB db = connection.getDB("mylearndb");  
26             /** 
27              * DBCollection代表集合,如果數據庫中沒有該集合,會默認創建一個 
28              */  
29             DBCollection fruitShop = db.getCollection("fruitshop");  
30             /** 
31              *  創建水果店文檔對象 
32              */  
33             DBObject shop1 = new BasicDBObject();  
34             shop1.put("name", "The Fruit King");  
35             /** 
36              *  水果店內水果保存在一個內嵌文檔的數組中,格式為: 
37              *  [{"name" : "apple", "quality" : "good", "price" : "5.6"},  
38              *   {"name" : "orange", "quality" : "normal", "price" : "1.5"}, 
39              *   ......] 
40              */  
41             // 數組通過List表示  
42             List<DBObject> fruits = new ArrayList<DBObject>();  
43             // 數組中的每一個文檔,我們通過BasicDBObjectBuilder來構造  
44             fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());  
45             fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());  
46             shop1.put("fruits", fruits);  
47               
48             fruitShop.insert(shop1);  
49               
50         }  
51       
52     }  

 

我們通過Shell連接到數據庫上,直觀地看看數據庫中集合內的數據:

1     > use mylearndb;  
2     switched to db mylearndb  
3     > db.fruitshop.find();  
4     { "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui  
5     ts" : [         {       "name" : "apple",       "quality" : "good",     "price"  
6     : "5.6" },      {       "name" : "orange",      "quality" : "normal",   "price"  
7     : "1.5" } ] }  
8     >  

以上就是利用Java驅動操作MongoDB的一個簡單示例,使用Java驅動操作MongoDB很簡單,大家實際使用中對於API可以參照MongoDB提供的官方文檔。

下面的鏈接就是2.9.0版驅動對應的API文檔:

http://api.mongodb.org/java/2.9.0/

參考鏈接:

JAVA單例MongoDB工具類


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM