Mongodb java 例子
生活随笔
收集整理的這篇文章主要介紹了
Mongodb java 例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
該文檔是翻譯自文檔[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章節,根據自己的理解整理而成。
希望能給像我這樣開始接觸的朋友一點幫助,同時也做個備忘,因為是剛剛學習,其中的很多功能目前都用不上,以后萬一有什么功能不太清楚,也可以直接查閱該文檔了。
?? MongoDB Java Driver 簡單操作
一、Java驅動一致性
MongoDB的Java驅動是線程安全的,對于一般的應用,只要一個Mongo實例即可,Mongo有個內置的連接池(池大小默認為10個)。
對于有大量寫和讀的環境中,為了確保在一個Session中使用同一個DB時,我們可以用以下方式保證一致性:
Java代碼 ?DB?mdb?=?mongo.getDB('dbname');? ?? ?? mdb.requestStart();? ?? //? ?? //?業務代碼? ?? //? ?? mdb.requestDone();???
DB mdb = mongo.getDB('dbname'); mdb.requestStart();
//
// 業務代碼
//
mdb.requestDone();
DB和DBCollection是絕對線程安全的,它們被緩存起來了,所以在應用中取到的可能是同一個對象。
二、保存/查找對象(DBObject)
Java驅動提供了DBObject接口,方便我們保存對象到數據庫中。
定義需要保存的對象:
public class Tweet implements DBObject {
? /** ...... */
}
然后我們可以使用該對象:
Java代碼 ?Tweet?tweet?=?new?Tweet();? ?? tweet.put("user",?userId);? ?? tweet.put("message",?message);? ?? tweet.put("date",?new?Date());? ?? ?? collection.insert(tweet);???
Tweet tweet = new Tweet();
tweet.put("user", userId);
tweet.put("message", message);
tweet.put("date", new Date()); collection.insert(tweet); 當從數據庫中查詢時,結果會自動的轉換成DBObject對象,我們可以轉換成我們自己的類型:
Java代碼 ?collection.setObjectClass(Tweet);? ?? ?? Tweet?myTweet?=?(Tweet)collection.findOne();???
collection.setObjectClass(Tweet); Tweet myTweet = (Tweet)collection.findOne();
三、創建連接
Java代碼 ?Mongo?m?=?new?Mongo();? ?? Mongo?m?=?new?Mongo("localhost");? ?? Mongo?m?=?new?Mongo("localhost",?27017);? ?? ?? DB?db?=?m.getDB("mydb);???
Mongo m = new Mongo();
Mongo m = new Mongo("localhost");
Mongo m = new Mongo("localhost", 27017); DB db = m.getDB("mydb);
注意:事實上,Mongo實例代表了一個數據庫連接池,即使在多線程的環境中,一個Mongo實例對我們來說已經足夠了。
四、認證(可選的)
boolean auth = db.authenticate("myUserName", "myPasswd");
五、取得Collection列表
Java代碼 ?Set<String>?colls?=?db.getCollectionNames();? ?? ?? for(String?s?:?colls)?{? ?? ??System.out.prinln(s);? ?? }???
Set<String> colls = db.getCollectionNames(); for(String s : colls) { System.out.prinln(s);
}
六、獲取一個Collection
DBCollection coll = db.getCollection("testCollection");
使用DBCollection,我們可以進行插入、查詢數據等數據操作。
七、插入文檔
假設有個JSON文檔如下所示:
{
? "name": "MongoDB",
? "type": "database",
? "count": 1,
? "info": {
???? x: 203,
???? y: 102
??? }
}
注意:上面的JSON文檔有個內嵌文檔"info"。
我們完全可以利用BasicDBObject來創建一個和上面的JSON一樣的文檔,并且把它保存在MongoDB中。
Java代碼 ?DBObject?doc?=?new?BasicDBObject();? ?? ?? doc.put("name",?"MongoDB");? ?? doc.put("type",?"database");? ?? doc.put("count",?1);? ?? ?? DBObject?info?=?new?BasicDBObject();? ?? info.put("x",?203);? ?? info.put("y",?102);? ?? ?? doc.put("info",?info);? ?? ?? coll.insert(doc);???
DBObject doc = new BasicDBObject(); doc.put("name", "MongoDB");
doc.put("type", "database");
doc.put("count", 1); DBObject info = new BasicDBObject();
info.put("x", 203);
info.put("y", 102); doc.put("info", info); coll.insert(doc); 八、查詢第一個文檔(findOne())
為了驗證在上面我們保存的類似JSON的數據,我們可以用findOne()方法取得數據。
findOne(): 返回一個文檔;
find(): 返回一個游標(DBCursor),其中包含一組對象DBObject;
DBObject doc = coll.findOne();
System.out.println(doc);
我們將會看到控制臺輸出:
{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"}
九、插入多個文檔
為了在后來展示更多的查詢方法,我們先插入幾個文檔,它們的JSON像這樣:
{
? "i": value
}
使用一個循環插入數據:
Java代碼 ?for(int?i?=?0;?i?<?100;?i++)?{? ?? ??coll.insert(new?BasicDBObject().append("i",?i));? ?? }???
for(int i = 0; i < 100; i++) { coll.insert(new BasicDBObject().append("i", i));
}
我們注意到,同一個coll,我們完全可以插入不同風格的數據,這就是MongoDB的重要特性“模式自由”。
十、統計文檔數
現在我們已經有101份文檔在數據庫中了,現在統計一下看是否正確。
Java代碼 ?long?count?=?coll.getCount();? ?? System.out.println(count);???
long count = coll.getCount();
System.out.println(count); 控制臺將會輸出:101
十一、使用游標取得所有的文檔
Java代碼 ?DBCursor?cursor?=?coll.find();? ?? ?? while(cursor.hasNext())?{? ?? ??DBObject?object?=?cursor.next();? ?? ??System.out.println(object);? ?? }???
DBCursor cursor = coll.find(); while(cursor.hasNext()) { DBObject object = cursor.next(); System.out.println(object);
} 十二、查詢單個文檔
Java代碼 ?DBObject?query?=?new?BasicDBObject();? ?? ?? query.put("i",?71);? ?? ?? cursor?=?coll.find(query);? ?? ?? while(cur.hasNext())?{? ?? ??DBObject?object?=?cursor.next();? ?? ??System.out.println(object);? ?? }???
DBObject query = new BasicDBObject(); query.put("i", 71); cursor = coll.find(query); while(cur.hasNext()) { DBObject object = cursor.next(); System.out.println(object);
} 控制臺的輸出類似如下:
{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
十三、查詢文檔集合
根據查詢條件,我們可以通過DBCollection從數據庫中取出多個對象,比如查詢i>50的文檔集合:
Java代碼 ?query?=?new?BasicDBObject();? ?? ?? query.put("i",?new?BasicDBObject("$gt",?50));?//?i>50? ?? ?? cursor?=?coll.find(query);? ?? ?? while(cursor.hasNext())?{? ?? ??DBObject?object?=?cursor.next();? ?? ??System.out.println(object);? ?? }???
query = new BasicDBObject(); query.put("i", new BasicDBObject("$gt", 50)); // i>50 cursor = coll.find(query); while(cursor.hasNext()) { DBObject object = cursor.next(); System.out.println(object);
} 比如查詢條件為 20<i<=30:
Java代碼 ?query?=?new?BasicDBObject();? ?? ?? //?20<i<=30? ?? query.put("i",?new?BasicDBObject("$gt",?20).append("$lte",?30));? ?? ?? cursor?=?coll.find(query);? ?? ?? while(cursor.hasNext())?{? ?? ??DBObject?object?=?cursor.next();? ?? ??System.out.println(object);? ?? }???
query = new BasicDBObject(); // 20<i<=30
query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30)); cursor = coll.find(query); while(cursor.hasNext()) { DBObject object = cursor.next(); System.out.println(object);
}
十四、創建索引
MongoDB支持索引,并且給一個DBCollection添加索引非常簡單,你只要指明需要創建索引的字段,然后指明其是升序(1)還是降序(-1)即可,比如在"i"上創建升序索引。
coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
十五、查詢索引
我們可以查詢到所有的索引:
Java代碼 ?List<DBObject>?list?=?coll.getIndexInfo();? ?? ?? for(DBObject?index?:?list){? ?? ??System.out.println(index);? ?? }???
List<DBObject> list = coll.getIndexInfo(); for(DBObject index : list){ System.out.println(index);
} 控制臺的輸出類似如下所示:
{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}
?? MongoDB的管理功能
??
一、獲取所有的數據庫
Java代碼 ?Mongo?m?=?new?Mongo();? ?? ?? for(String?s?:?m.getDatabaseNames())?{? ?? ??System.out.println(s);? ?? }???
Mongo m = new Mongo(); for(String s : m.getDatabaseNames()) { System.out.println(s);
}
二、刪除數據庫
m.dropDatabase("my_new_db");
?? MongoDB的Java類型
一、對象ID
ObjectId被用作自動生成的唯一ID.
Java代碼 ?ObjectId?id?=?new?ObjectId();? ?? ObjectId?copy?=?new?ObjectId(id);???
ObjectId id = new ObjectId();
ObjectId copy = new ObjectId(id); 二、正則表達式
Java代碼 ?Pattern?john?=?Pattern.compile("joh?n",?CASE_INSENSITIVE);? ?? DBObject?query?=?new?BasicDBObject("name",?john);???
Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
DBObject query = new BasicDBObject("name", john);
// 查詢所有 "name" 匹配 /joh?n/i 的文檔
DBCursor cursor = collection.find(query);
三、日期和時間
Java代碼 ?Date?now?=?new?Date();? ?? DBObject?time?=?new?BasicDBObject("ts",?now);? ?? ?? collection.save(time);???
Date now = new Date();
DBObject time = new BasicDBObject("ts", now); collection.save(time);
四、數據庫引用
DBRef可以用來保存數據庫引用。
Java代碼 ?DBRef?addressRef?=?new?DBRef(db,?"foo.bar",?address_id);? ?? DBObject?address?=?addressRef.fetch();? ?? ?? DBObject?person?=?BasicDBObjectBuilder.start()? ?? ??.add("name",?"Fred")? ?? ??.add("address",?addressRef)? ?? ??.get();? ?? collection.save(person);? ?? ?? DBObject?fred?=?collection.findOne();? ?? DBRef?addressObj?=?(DBRef)fred.get("address");? ?? addressObj.fetch();???
DBRef addressRef = new DBRef(db, "foo.bar", address_id);
DBObject address = addressRef.fetch(); DBObject person = BasicDBObjectBuilder.start() .add("name", "Fred") .add("address", addressRef) .get();
collection.save(person); DBObject fred = collection.findOne();
DBRef addressObj = (DBRef)fred.get("address");
addressObj.fetch();
五、二進制數據
字節數組(byte[])被當作二進制數據。
六、內嵌文檔
JSON樣式的數據如下:
{
? "x": {
?? "y": 3
? }
}
則在MongoDB中,Java表示為:
Java代碼 ?DBObject?y?=?new?BasicDBObject("y",?3);? ?? DBObject?x?=?new?BasicDBObject("x",?y);???
DBObject y = new BasicDBObject("y", 3);
DBObject x = new BasicDBObject("x", y); 七、數組
任何繼承自List的對象,在MongoDB中,都被當成是數組。
如果想表示如下JSON數據:
Java代碼 ?{? ?? ??"x":?[? ?? ???1,? ?? ???2,? ?? ???{"foo":?"bar"},? ?? ???4? ?? ??]? ?? }???
{ "x": [ 1, 2, {"foo": "bar"}, 4 ]
}
則在Java中,應該為:
Java代碼 ?List<Object>?x?=?new?ArrayList<Object>();? ?? x.add(1);? ?? x.add(2);? ?? x.add(new?BasicDBObject("foo",?"bar"));? ?? x.add(4);? ?? ?? DBObject?doc?=?new?BasicDBObject("x",?x);? ?? System.out.println(doc); ??
希望能給像我這樣開始接觸的朋友一點幫助,同時也做個備忘,因為是剛剛學習,其中的很多功能目前都用不上,以后萬一有什么功能不太清楚,也可以直接查閱該文檔了。
?? MongoDB Java Driver 簡單操作
一、Java驅動一致性
MongoDB的Java驅動是線程安全的,對于一般的應用,只要一個Mongo實例即可,Mongo有個內置的連接池(池大小默認為10個)。
對于有大量寫和讀的環境中,為了確保在一個Session中使用同一個DB時,我們可以用以下方式保證一致性:
Java代碼 ?
DB和DBCollection是絕對線程安全的,它們被緩存起來了,所以在應用中取到的可能是同一個對象。
二、保存/查找對象(DBObject)
Java驅動提供了DBObject接口,方便我們保存對象到數據庫中。
定義需要保存的對象:
public class Tweet implements DBObject {
? /** ...... */
}
然后我們可以使用該對象:
Java代碼 ?
Java代碼 ?
三、創建連接
Java代碼 ?
注意:事實上,Mongo實例代表了一個數據庫連接池,即使在多線程的環境中,一個Mongo實例對我們來說已經足夠了。
四、認證(可選的)
boolean auth = db.authenticate("myUserName", "myPasswd");
五、取得Collection列表
Java代碼 ?
六、獲取一個Collection
DBCollection coll = db.getCollection("testCollection");
使用DBCollection,我們可以進行插入、查詢數據等數據操作。
七、插入文檔
假設有個JSON文檔如下所示:
{
? "name": "MongoDB",
? "type": "database",
? "count": 1,
? "info": {
???? x: 203,
???? y: 102
??? }
}
注意:上面的JSON文檔有個內嵌文檔"info"。
我們完全可以利用BasicDBObject來創建一個和上面的JSON一樣的文檔,并且把它保存在MongoDB中。
Java代碼 ?
為了驗證在上面我們保存的類似JSON的數據,我們可以用findOne()方法取得數據。
findOne(): 返回一個文檔;
find(): 返回一個游標(DBCursor),其中包含一組對象DBObject;
DBObject doc = coll.findOne();
System.out.println(doc);
我們將會看到控制臺輸出:
{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"}
九、插入多個文檔
為了在后來展示更多的查詢方法,我們先插入幾個文檔,它們的JSON像這樣:
{
? "i": value
}
使用一個循環插入數據:
Java代碼 ?
我們注意到,同一個coll,我們完全可以插入不同風格的數據,這就是MongoDB的重要特性“模式自由”。
十、統計文檔數
現在我們已經有101份文檔在數據庫中了,現在統計一下看是否正確。
Java代碼 ?
十一、使用游標取得所有的文檔
Java代碼 ?
Java代碼 ?
{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
十三、查詢文檔集合
根據查詢條件,我們可以通過DBCollection從數據庫中取出多個對象,比如查詢i>50的文檔集合:
Java代碼 ?
Java代碼 ?
十四、創建索引
MongoDB支持索引,并且給一個DBCollection添加索引非常簡單,你只要指明需要創建索引的字段,然后指明其是升序(1)還是降序(-1)即可,比如在"i"上創建升序索引。
coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
十五、查詢索引
我們可以查詢到所有的索引:
Java代碼 ?
{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}
?? MongoDB的管理功能
??
一、獲取所有的數據庫
Java代碼 ?
二、刪除數據庫
m.dropDatabase("my_new_db");
?? MongoDB的Java類型
一、對象ID
ObjectId被用作自動生成的唯一ID.
Java代碼 ?
Java代碼 ?
// 查詢所有 "name" 匹配 /joh?n/i 的文檔
DBCursor cursor = collection.find(query);
三、日期和時間
Java代碼 ?
四、數據庫引用
DBRef可以用來保存數據庫引用。
Java代碼 ?
五、二進制數據
字節數組(byte[])被當作二進制數據。
六、內嵌文檔
JSON樣式的數據如下:
{
? "x": {
?? "y": 3
? }
}
則在MongoDB中,Java表示為:
Java代碼 ?
任何繼承自List的對象,在MongoDB中,都被當成是數組。
如果想表示如下JSON數據:
Java代碼 ?
則在Java中,應該為:
Java代碼 ?
總結
以上是生活随笔為你收集整理的Mongodb java 例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GDI 和GDI+ 混合编程
- 下一篇: 法学教授:洋文凭情结是对教育体制的嘲弄