初試MongoDB

來源:互聯網
上載者:User

1. MongoDB資料庫簡介

2. MongoDB安裝

3. MongoDB控制台簡介

4. 如何向資料庫插入資料?

5.  如何查詢資料庫?

6. java操作資料庫樣本

7. 代碼下載 

1.MongoDB資料庫簡介

 分布式的CAP理論告訴我們,一個分布式系統不可能同時滿足一致性,可用性和分區容錯性,最多隻能滿足其中的兩個。關係型資料庫通過把更新操作寫到事務型日誌裡實現了部分耐用性,但帶來的是寫效能的下降。MongoDB(不僅僅sql)資料庫通過降低一些特性來達到高效能的需求。MongoDB取自“humongous”,是一種開來源文件資料庫。MongoDB是一種面向集合(collection)的,模式自由的資料庫。

通過和常規的sql資料庫(sql server,oracle等)的比較來認識nosql資料庫的一些概念。MongoDB中同樣包含資料庫的概念,資料庫之下是稱之為collection的集合對象,collection對象大致上類似於傳統資料庫中的表,collection之下就是“文檔對象”,大致上相反與傳統資料庫的record。但是需要注意的是資料庫和collections集合的建立都是lazy的,也就是說只有在向集合中實際插入資料時,集合和資料庫檔案才真正建立。

  

2. MongoDB安裝

我是用的測試平台環境如下:

1. vmware虛擬機器

2. ubuntu 10.04 

MongoDB在ubuntu下的安裝還是比較簡單的。命令如下:

xuqiang@ubuntu:~/mongodb$ curl http://downloads.mongodb.org/linux/mongodb-linux-i686-1.6.4.tgz > mongo.tgzxuqiang@ubuntu:~/mongodb$ tar xzf mongo.tgz

進入剛剛解壓的目錄中:

xuqiang@ubuntu:~/mongodb$ cd mongodb-linux-i686-1.6.4/

該目錄下檔案如下: 

 

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4$ lsbin  GNU-AGPL-3.0  README  THIRD-PARTY-NOTICES

下面開始設定資料庫檔案隱藏檔夾。預設會在/data/db/儲存資料庫檔案,所以首先建立該目錄:

xuqiang@ubuntu:~$ sudo mkdir -p /data/db/

改變該目錄的許可權:

xuqiang@ubuntu:~$ sudo chown `id -u` /data/db

準備好檔案目錄之後,啟動伺服器,進入bin目錄下:

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4$ cd binxuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ lsbsondump  mongod     mongoexport  mongoimport   mongos      mongostatmongo     mongodump  mongofiles   mongorestore  mongosniff使用超級使用者啟動伺服器: 

xuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ sudo ./mongod

mongod     mongodumpxuqiang@ubuntu:~/mongodb/mongodb-linux-i686-1.6.4/bin$ sudo ./mongod

輸出如下:

 ./mongod --help for help and startup options

Sun Mar 27 04:26:17 MongoDB starting : pid=6289 port=27017 dbpath=/data/db/ 32-bit** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data**       see http://blog.mongodb.org/post/137788967/32-bit-limitationsSun Mar 27 04:26:17 db version v1.6.4, pdfile version 4.5Sun Mar 27 04:26:17 git version: 4f5c02f8d92ff213b71b88f5eb643b7f62b50abcSun Mar 27 04:26:17 sys info: Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37Sun Mar 27 04:26:17 [initandlisten] waiting for connections on port 27017Sun Mar 27 04:26:18 [websvr] web admin interface listening on port 28017

通過上面的查看可以看到當前伺服器在27017連接埠上監聽,同時資料庫檔案是儲存在/data/db/下的。當然如果不想在命令列鍵入檔案的全路徑,可以將上面的路徑添加到環境變數中,或者是將這幾個bin下的檔案全部拷貝到/usr/bin/下。伺服器啟動起來之後,我們來啟動用戶端程式:

重新開啟一個bash console,命令: 

 xuqiang@ubuntu:~/mongodb$ mongo

輸出: 

MongoDB shell version: 1.6.4

connecting to: test>到目前伺服器已經啟動起來,同時我們通過用戶端和伺服器端成功串連。呵呵,是不是比較激動,下面是一個簡單的測試:

> db.foo.save( { a : 2 } );

> db.foo.find();{ "_id" : ObjectId("4d8f216819225380327a66ae"), "a" : 2 }

 

需要注意的是foo集合如果test資料庫中不存在,那麼將自動建立。 

3. MongoDB控制台簡介

 MongoDB採用的javascript式的互動控制台,可以從中直接操作資料庫。在其中鍵入help可以查看常見的說明主題,然後進入具體的說明主題中。通過help命令能夠對MongoDB命令列有個初步認識。js的控制台中有命令記憶的功能,可以通過上下箭頭來查看先前鍵入的命令。

 > help

        db.help()                    help on db methods        db.mycoll.help()             help on collection methods        rs.help()                    help on replica set methods        help connect                 connecting to a db help        help admin                   administrative help        help misc                    misc things to know        show dbs                     show database names        show collections             show collections in current database        show users                   show users in current database        show profile                 show most recent system.profile entries with time>= 1ms        use <db_name>                set current database        db.foo.find()                list objects in collection foo        db.foo.find( { a : 1 } )     list objects in foo where a == 1        it                           result of the last line evaluated; use to furtheriterate        exit                         quit the mongo shell4.  如何向資料庫中插入資料

下面的測試是在mydb中進行,首先進行資料庫切換:

 > use mydb

switched to db mydb

4.1 插入命令結構如下:

 

4.2 樣本 (http://www.mongodb.org/display/DOCS/Tutorial#): 

> j = { name : "mongo" };{"name" : "mongo"}> t = { x : 3 };{ "x" : 3  }> db.things.save(j);> db.things.save(t);> db.things.find();{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }5. 如何查詢資料庫 ?

5.1 查詢基本結構:

 

5.2 使用遊標?

 > var cursor = db.things.find();                                                       

> while (cursor.hasNext()) printjson(cursor.next());

其中printjson是內建函數。

5.3 如何增加查詢條件?

> db.things.find({name:"mongo"}).forEach(printjson);{ "_id" : ObjectId("4d8de0a325a9112df63a8c62"), "name" : "mongo" }

上面的查詢等價的sql如下:

 SELECT * FROM things WHERE name="mongo"

5.4 如何僅僅返回特定的列?

> db.things.find({x:4}, {j:true}).forEach(printjson);{ "_id" : ObjectId("4d8de13a25a9112df63a8c64"), "j" : 0 }

顯然上面僅僅返回了j這一列。

5.5 如何限制返回查詢的條目數量(分頁中使用)?

> db.things.find().limit(3);{ "_id" : ObjectId("4d8de0a325a9112df63a8c62"), "name" : "mongo" }{ "_id" : ObjectId("4d8de0c625a9112df63a8c63"), "x" : 3 }{ "_id" : ObjectId("4d8de13a25a9112df63a8c64"), "x" : 4, "j" : 0 }6.java操作資料庫樣本?

 import java.util.Set;

import com.mongodb.DB;import com.mongodb.Mongo;import com.mongodb.BasicDBObject;import com.mongodb.DBCollection;import com.mongodb.DBObject;import com.mongodb.DBCursor;public class QuickTour {public static void main(String[] args) {try {System.out.println("connect to server ...");// server, portMongo m = new Mongo( "localhost" , 27017 );DB db = m.getDB( "mydb" );// get the collections Set<String> colls = db.getCollectionNames();for (String s : colls) {    System.out.println(s);}// insert into the db// make a new collectionDBCollection coll = db.getCollection("testCollection");BasicDBObject doc = new BasicDBObject();doc.put("name", "MongoDB");        doc.put("type", "database");        doc.put("count", 1);                coll.insert(doc);        // search db        DBObject myDoc = coll.findOne();        System.out.println(myDoc);                // use cursor to retrive data        DBCursor cur = coll.find();                while(cur.hasNext()) {            System.out.println(cur.next());        }}catch(Exception e) {System.out.println(e.toString());}}}7. 代碼下載 

/Files/xuqiang/nosql/MongoDBTest.rar 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.