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/