mongodb java api

來源:互聯網
上載者:User

原文地址:http://keben1983.blog.163.com/blog/static/143638081201010591157929/ 

該文檔是翻譯自文檔[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章節,根據自己的理解整理而成。 

希望能給像我這樣開始接觸的朋友一點協助,同時也做個備忘,因為是剛剛學習,其中的很多功能目前都用不上,以後萬一有什麼功能不太清楚,也可以直接查閱該文檔了。 

   MongoDB Java Driver 簡單操作 

一、Java驅動一致性 

MongoDB的Java驅動是安全執行緒的,對於一般的應用,只要一個Mongo執行個體即可,Mongo有個內建的串連池(池大小預設為10個)。 

對於有大量寫和讀的環境中,為了確保在一個Session中使用同一個DB時,我們可以用以下方式保證一致性: 

DB mdb = mongo.getDB('dbname'); 

mdb.requestStart(); 
// 
// 業務代碼 
// 
mdb.requestDone(); 

DB和DBCollection是絕對安全執行緒的,它們被緩衝起來了,所以在應用中取到的可能是同一個對象。 

二、儲存/尋找對象(DBObject) 

Java驅動提供了DBObject介面,方便我們儲存對象到資料庫中。 

定義需要儲存的對象: 

public class Tweet implements DBObject { 
  /** ...... */ 

然後我們可以使用該對象: 

Tweet tweet = new Tweet(); 
tweet.put("user", userId); 
tweet.put("message", message); 
tweet.put("date", new Date()); 

collection.insert(tweet); 

當從資料庫中查詢時,結果會自動的轉換成DBObject對象,我們可以轉換成我們自己的類型: 

collection.setObjectClass(Tweet); 

Tweet myTweet = (Tweet)collection.findOne(); 

三、建立串連 

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列表 

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中。 

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 

使用一個迴圈插入資料: 

for(int i = 0; i < 100; i++) { 
  coll.insert(new BasicDBObject().append("i", i)); 

我們注意到,同一個coll,我們完全可以插入不同風格的資料,這就是MongoDB的重要特性“模式自由”。 

十、統計文檔數 

現在我們已經有101份文檔在資料庫中了,現在統計一下看是否正確。 

long count = coll.getCount(); 
System.out.println(count); 

控制台將會輸出:101 

十一、使用遊標取得所有的文檔 

DBCursor cursor = coll.find(); 

while(cursor.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的文檔集合: 

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: 

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代表升序 

十五、查詢索引 

我們可以查詢到所有的索引: 

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的管理功能 
   
一、擷取所有的資料庫 

Mongo m = new Mongo(); 

for(String s : m.getDatabaseNames()) { 
  System.out.println(s); 

二、刪除資料庫 

m.dropDatabase("my_new_db"); 

   MongoDB的Java類型 

一、對象ID 

ObjectId被用作自動產生的唯一ID. 

ObjectId id = new ObjectId(); 
ObjectId copy = new ObjectId(id); 

二、Regex 

Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE); 
DBObject query = new BasicDBObject("name", john); 

// 查詢所有 "name" 匹配 /joh?n/i 的文檔 
DBCursor cursor = collection.find(query); 

三、日期和時間 

Date now = new Date(); 
DBObject time = new BasicDBObject("ts", now); 

collection.save(time); 

四、資料庫引用 

DBRef可以用來儲存資料庫引用。 

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表示為: 

DBObject y = new BasicDBObject("y", 3); 
DBObject x = new BasicDBObject("x", y); 

七、數組 

任何繼承自List的對象,在MongoDB中,都被當成是數組。 

如果想表示如下JSON資料: 


  "x": [ 
   1, 
   2, 
   {"foo": "bar"}, 
   4 
  ] 

則在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);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.