mongodb官方教程

來源:互聯網
上載者:User

平台以win32為例,內容均來自官網,略加整理。

參考:

http://wiki.mongodb.org/display/DOCS/Quickstart+Windows

http://www.mongodb.org/display/DOCS/Tutorial

中文文檔:

http://wiki.mongodb.org/display/DOCS/Home

下面的Translations的“中文”連結

 

1. 下載先行編譯的二進位

選擇32bit和64bit

建議使用64位版本的Windows運行64位版本的MongoDB。

http://wiki.mongodb.org/display/DOCS/Downloads

解壓後可以把目錄更名為mongo-xxxxxxx以表示區分

 

2. 建立資料目錄

Windows下預設的資料目錄儲存在MongoDB二進位所在盤中。

例如在C:/下的mongo都會儲存在C:/data/db,

不過它不會自動建立,必須手工建立

C:/> mkdir /data

C:/> mkdir /data/db

 

3. 運行MongoDB伺服器

最重要的二進位檔案是:資料庫伺服器mongod.exe和管理工具mongo.exe

假設在C:/my_mongo_dir/bin中,則執行以下命令啟動伺服器

C:/> cd /my_mongo_dir/bin

C:/my_mongo_dir/bin > mongod

如果要以服務的形式運行,則使用類似的命令列

mongod --bind_ip 127.0.0.1 --logpath d:/mongo/logs --logappend --dbpath d:/mongo/data --directoryperdb --install

其中

mongod --install

mongod --service

mongod --remove

mongod --reinstall

可以對服務執行添加和刪除操作。

--serviceName {arg}

--serviceUser {arg}

--servicePassword {arg}

設定服務的相關資訊

 

4. 用mongo.exe測試簡單JavaScript語句

C:/> cd /my_mongo_dir/bin

C:/my_mongo_dir/bin> mongo

> // the mongo shell is a javascript shell connected to the db

> 3+3

6

> db

test

> // the first write will create the db:

> db.foo.insert( { a : 1 } )

> db.foo.find()

{ _id : ..., a : 1 }

mongo.exe的詳細的用法可以參考mongo.exe --help

 

5. (可選)用VS編譯MongoDB的windows版本。

詳見

http://wiki.mongodb.org/display/DOCS/Building+for+Windows

 

6. SQL與MongoDB的對照表

MongoDB擁有與關係型資料庫(例如MySQL)相似的查詢能力,但查詢文法不同。

http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

MongoDB的請求(包括索引鍵樣式)以JSON (BSON)對象表達,

而且包含一個實際動詞(如find)。

以下是SQL與Mongo請求語言語句的對照(可以運行於管理命令列mongo.exe)

(註:不一定等效,某些操作在不同的資料庫有自己特有的規定,

例如MySQL,所以要格外小心)

(1) 建立

CREATE TABLE USERS (a Number, b Number)

(隱式,但也可以顯式建立,例如一個封頂集合)

> # mongo shell

> db.createCollection("mycoll", {capped:true, size:100000})

> show collections

如果驅動支援,還可以

> db.runCommand( {createCollection:"mycoll", capped:true, size:100000} )

(2) 插入

INSERT INTO USERS VALUES(1,1)

> db.users.insert({a:1,b:1})

(3) 查詢

SELECT a,b FROM users

> db.users.find({}, {a:1,b:1})

SELECT * FROM users

> db.users.find()

SELECT * FROM users WHERE age=33

> db.users.find({age:33})

SELECT a,b FROM users WHERE age=33

> db.users.find({age:33}, {a:1,b:1})

SELECT * FROM users WHERE age=33 ORDER BY name

> db.users.find({age:33}).sort({name:1})

SELECT * FROM users WHERE age>33

> db.users.find({'age':{$gt:33}})

> db.users.find({age:{$gt:33}})

SELECT * FROM users WHERE age<33

> db.users.find({'age':{$lt:33}})

> db.users.find({age:{$lt:33}})

SELECT * FROM users WHERE a=1 and b='q'

> db.users.find({a:1,b:'q'})

(4) 更新(20110311更新:包括刪除?)

UPDATE users SET a=1 WHERE b='q'

> db.users.update({b:'q'}, {$set:{a:1}}, false, true)

(5) 索引

CREATE INDEX myindexname ON users(name)

> db.users.ensureIndex({name:1})

EXPLAIN SELECT * FROM users WHERE z=3

> db.users.find({z:3}).explain()

(6) 集合函數,排序和分頁和其它查詢

SELECT * FROM users ORDER BY name DESC

> db.users.find().sort({name:-1})

SELECT * FROM users LIMIT 10 SKIP 20

> db.users.find().limit(10).skip(20)

SELECT * FROM users LIMIT 1

> db.users.findOne()

SELECT DISTINCT last_name FROM users

> db.users.distinct('last_name')

SELECT COUNT(*y) FROM users

> db.users.count()

SELECT COUNT(*y) FROM users where AGE > 30

> db.users.find({age: {'$gt': 30}}).count()

SELECT COUNT(AGE) from users

> db.users.find({age: {'$exists': true}}).count()

更詳細的用法見手冊

http://www.mongodb.org/display/DOCS/Manual

 

7. 用mongo.exe管理資料庫

雙擊運行mongo.exe

預設串連到localhost的test資料庫

MongoDB shell version: 1.6.3

connecting to: test

>

切換資料庫(可以是不存在的)

MongoDB不要求顯式建立資料庫的集,而是在插入資料時自動建立。

如果集合不存在,MongoDB會認為是空集合。

用use切換資料庫不會立刻建立資料庫,而是等到資料插入時才建立。

所以show dbs不會立刻顯示該資料庫

> use mydb

switched to db mydb

顯示所有資料庫

> show dbs

admin

local

test

查看協助:

> 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 wit

h 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 f

urther iterate

        exit                         quit the mongo shell

建立變數,賦值,儲存到集合中,然後讀出來。

隱含以下規則:

不需要建立集;

結構動態可變,而且允許異構的對象放在一起;

自動添加_id欄位;

ObjectID值是唯一的。

> 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 }

迴圈插入,顯示時如果超過20條,顯示前20條,可用it繼續顯示

find()返回遊標對象

> for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});

> db.things.find();

{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }

{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }

{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85a"), "x" : 4, "j" : 5 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85b"), "x" : 4, "j" : 6 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85c"), "x" : 4, "j" : 7 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85d"), "x" : 4, "j" : 8 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85e"), "x" : 4, "j" : 9 }

{ "_id" : ObjectId("4c220a42f3924d31102bd85f"), "x" : 4, "j" : 10 }

{ "_id" : ObjectId("4c220a42f3924d31102bd860"), "x" : 4, "j" : 11 }

{ "_id" : ObjectId("4c220a42f3924d31102bd861"), "x" : 4, "j" : 12 }

{ "_id" : ObjectId("4c220a42f3924d31102bd862"), "x" : 4, "j" : 13 }

{ "_id" : ObjectId("4c220a42f3924d31102bd863"), "x" : 4, "j" : 14 }

{ "_id" : ObjectId("4c220a42f3924d31102bd864"), "x" : 4, "j" : 15 }

{ "_id" : ObjectId("4c220a42f3924d31102bd865"), "x" : 4, "j" : 16 }

{ "_id" : ObjectId("4c220a42f3924d31102bd866"), "x" : 4, "j" : 17 }

{ "_id" : ObjectId("4c220a42f3924d31102bd867"), "x" : 4, "j" : 18 }

has more

> it

{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }

{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

可以顯式儲存遊標變數,然後操作(用內建的tojson()可以美化文檔)

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

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

還可以使用forEach()執行迴圈(但需要定義一個專門的函數)

> db.things.find().forEach(printjson);

可以把遊標當作數組使用。

此時所有資料的載入到記憶體,對於大的結果集可能會導致記憶體溢出。

所以盡量以迭代器形式使用

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

> printjson(cursor[4]);

可以轉換為數組(數組概念不適用於驅動,僅使用於互動介面)

> var arr = db.things.find().toArray();

> arr[5];

{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "x" : 4, "j" : 4 }

由於MongoDB的遊標是非快照的,

所以第一次和最後一次next()之間的操作可能影響也可能不影響查詢結果。

此時需要使用鎖住快照查詢。

MongoDB具有與SQL相似的查詢能力,

通常需要建立“查詢文檔”(即那個作為參數的大括弧JSON對象)

例如:

SELECT * FROM things WHERE name="mongo"

> db.things.find({name:"mongo"}).forEach(printjson);

SELECT * FROM things WHERE x=4

> db.things.find({x:4}).forEach(printjson);

{ a:A, b:B, ... }的意思是

where a==A and b==B and ..."

參考http://www.mongodb.org/display/DOCS/Queries+and+Cursors

MongoDB還允許返回“部分文檔”,方法是在find的第二個參數中指定文檔的元素子集。

注意_id欄位總是要返回

SELECT j FROM things WHERE x=4

> db.things.find({x:4}, {j:true}).forEach(printjson);

為方便處理遊標,mongo和驅動提供findOne()查詢文檔。

和find()參數一樣,但返回的不是遊標,而是滿足條件的第一個文檔或者null。

這種方法高效,使資料庫和用戶端的工作減少,

> printjson(db.things.findOne({name:"mongo"}));

等效於find({name:"mongo"}).limit(1)

可以用limit()限制結果的大小。

好處和findOne()一樣。

> db.things.find().limit(3);

如果想查詢方法名,可以用help()

> db.help()

> db.whatever.help()

如果忽略參數表,則輸出原始碼

> printjson

function (x) {

    print(tojson(x));

}

由於mongo是完全的JavaScript外殼,所以支援任何JavaScript函數,文法和類。

另外還定義自己的類和全域變數(例如db),

API列表見

http://api.mongodb.org/js/

相關文章

聯繫我們

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