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的方法都是一些常用的方法,比較簡單。如果有什麼問題,可以給我留言,謝謝!