Mongo官方文檔翻譯 (一)

最近在學習Mongo,向通過官方文檔來獲得第一手資料,無奈自己的英語水比較跛腳,但是總是要邁出第一步,所以現在嘗試翻譯在這裏,如果有不好的地方,還望各位看官拍磚,廢話少說,開始:


官方文檔地址:http://docs.mongodb.org/manual/tutorial/getting-started/

1.連接到數據庫
通過Mongo命令連接到數據庫,然後可以通過mongo shell來在數據庫的實例中選擇一個邏輯數據庫,也可以通過mongo shell獲得幫助信息;


1.1.在系統提示符下(命令行),通過運行mongo命令,如下:
mongo
默認情況下,mongo命令會把連接建立在localhost接口,並監聽在27017端口。如果要連接到不同的數據庫
可以使用 --port和--host操作!

1.2.選擇一個數據庫
在啓動mongl sell之後,會話會默認連接test數據庫,任何時候都可以通過db命令來返回當前的數據庫:
db
db命令返回當前的數據庫,
1.1.1 在mongo shell界面,通過如下命令顯示mongo中的所有數據庫:
show dbs;
1.1.2 通過以下命令來切換到一個新建的名爲mydb的數據庫中:
use mydb;
1.1.3 通過db命令來確認當前的數據庫爲mydb,操作如下:
db;
注意:如果你依然使用show dbs命令,mongo db不會返回mydb的名稱,因爲MongoDB直到往當前數據庫中插入數據時纔會
建立該數據庫,(這一點類似於Android中SQLite數據庫,只有getReadableDatabase()方法調用時纔會新建數據庫)
注意:在2.3.1的版本中,show databases;同樣會返回一個數據庫列表!

1.3.顯示mongo 幫助
你可以再任何時候通過如下命令來調用mongo shell得到幫助信息:
help;
此外你可以在其他方法比如一些JavaScript函數,cursor對象後面添加.help()
例如:db.help(),db.collection.help()等,他們會返回具體的幫助信息!

2.創建一個聚集並插入文檔
在這裏,你會將文檔插入到mydb數據庫中一個新建的名爲things的聚集中。

MongoDB會在第一次使用數據庫的時候默認創建數據庫和聚集,你不必要再第一次插入數據之前進行單獨的創建
數據庫和聚集。此外,因爲MongoDB採用動態模式(dynamic schemas),所以你不必在將文檔插入到聚集之前特意指定他們的結構!
插入一個單獨的文檔
2.1 在命令提示符下,通過以下命令確認當前context是mydb:
db
2.2 如果在剛纔的操作中mongo沒有返回mydb,通過如下命令將context設置爲mydb:
use mydb
2.3 通過以下的JavaScript順序語句操作,創建兩個名爲j,k的文檔:
j = {name : "mongo"}
k = {x : 3}
2.4 通過以下操作序列將文檔j,k插入到聚集things中:
db.things.insert(j)
db.things.insert(k)
當你插入第一個文檔的時候,mongod文件會創建mydb數據庫和things聚集!
2.5 通過以下操作來確認things已經被創建:
show collections
在這裏,mongo shell會返回當前數據庫(mydb)下的聚集列表,當前只有一個名叫things的聚集。
每個mongo數據庫都有會以個名爲system.indexes的聚集!
2.6 通過在things聚集中進行查詢操作來確定剛纔插入的兩條文檔已經存在。如下語句所示使用find()函數:
db.things.find()

以上操作會返回如下結果,其中ObjectId是唯一的:

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

所有的MongoDB文檔都會有一個唯一的_id字段值,這項操作不需要明確的指定_id字段的值,
MongoDB會自動在文檔插入之前生成一個唯一的ObjectId值來填充這個_id字段!



3.通過一個For循環插入多條文檔
3.1 命令提示符下,通過下面的For循環向things聚集中添加多條文檔:
for(var i=1; i<= 20; i++) db.things.insert( { x : 4 , j : i } )
3.2 通過如下命令查詢聚集中的文檔:
db.things.find()

這裏mongo shell會顯示聚集中的前20條文檔,每個文檔的ObjectId都是唯一的:


{ "_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 }

3.2.1 find()函數會返回一個遊標(cursor),通過在mongo shell中使用it命令來
返回更多的文檔或遍歷cursor。mongo shell會遍歷到cursor剩餘數據,並
顯示如下結果:
{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

4.遊標的使用
當你查詢一個聚集的時候,mongoDB會返回包含查詢結果在內的cursor對象。然後mongo shell
會遍歷cursor去顯示結果,mongo寧可每次顯示20條結果並等待命令是否顯示下面20條也不願意
一次就顯示全部結果,這樣使得mongo避免了將數千條數據結果在一次顯示出來的而引發的相關
問題。

it命令會遍歷出cursor的後面20條記錄,在上面的例子中,因爲下面只有2條數據,所以it命令只返回
了2條結果!

接下來的程序會顯示cursor的其他用法,更詳細的文檔說明參照Cursor部分!

通過循環遍歷Cursor:
4.1 在MongoDB JavaScipt shell中,查詢things聚集並且將返回的cursor對象複製到
變量c中:

var c = db.things.find()

4.2 通過一個While循環遍歷C變量來打印所有結果:

while( c.hasNext() ) printjson( c.next() )

如果cursor中還有結果,hasNext()函數會返回true,next()函數會返回接下來的文檔。
printjson()函數會講結果以JSON格式來輸出!

以上操作會返回如下結果,而且 ObjectId字段仍然是唯一的:

{ "_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 }
{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

4.3 通過數組來使用cursor:

你可以小數組一樣巧妙的操作一個cursor對象。仔細理解下面的操作:

4.3.1 在mongo shell中,查詢things聚集並將結果複製給一個C變量:

var c = db.things.find()
4.3.2 通過如下操作得到數據下表爲4的文檔(記錄):

printjson( c [ 4 ] )

MongoDB返回如下數據:

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

當你通過數組下標的形式訪問cursor中的文檔時,mongo首先會調用cursor.toArray()方法,並把cursor返回
的所有文檔加載到內存中,然後下標就可以在生成的數組中使用了,這項操作會完整的
遍歷整個cursor並且會將遊標移動到末尾!

對於巨大的結果集,mongo可能會耗盡所有可用的內存!

4.4查詢指定的文檔(記錄)

MongoDB有一個豐富的查詢系統,允許你在一個聚集中選擇和鍋爐特定字段和值得文檔(記錄)!

在這個例子中,你可以通過向find()方法傳遞一個“query document)”的參數來查血指定的文檔。
一個“query document” 指定了查詢必須匹配返回的文檔的標準!

如下操作來查詢指定的文檔:

1.在mongo shell中通過傳遞{name : "mongo" }文檔對象作爲參數調用find()函數來查詢所有文檔中
name字段值爲“mongo”的文檔:

db.things.find( { name : "mongo" } )

 MongoDB會返回一個符合該標準的文檔,其中ObjectId是唯一的:
 
  { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
 
2. 通過傳遞{x : 4} 對象作爲參數給find()函數來查詢所有文檔中x的值爲4的文檔:

db.things.find( { x : 4 } )

MongoDB會返回如下結果集合:
{ "_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 }
{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "x" : 4, "j" : 19 }
{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "x" : 4, "j" : 20 }

ObjectId總是唯一的(這一句好囉嗦哦)!

3.查詢所有文檔中x的值爲4的,如剛纔的查詢,但是隻返回j的值。MongoDB也會返回_id
字段,除非進行明確的排除。所以,你把{j:1}文檔作爲投影添加的find()函數的第二個
參數位置,這個操作如下:

db.things.find( { x : 4 } , { j : 1 } )

MongoDB會返回如下結果:

{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }
{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "j" : 2 }
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "j" : 3 }
{ "_id" : ObjectId("4c220a42f3924d31102bd859"), "j" : 4 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85a"), "j" : 5 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85b"), "j" : 6 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85c"), "j" : 7 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85d"), "j" : 8 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85e"), "j" : 9 }
{ "_id" : ObjectId("4c220a42f3924d31102bd85f"), "j" : 10 }
{ "_id" : ObjectId("4c220a42f3924d31102bd860"), "j" : 11 }
{ "_id" : ObjectId("4c220a42f3924d31102bd861"), "j" : 12 }
{ "_id" : ObjectId("4c220a42f3924d31102bd862"), "j" : 13 }
{ "_id" : ObjectId("4c220a42f3924d31102bd863"), "j" : 14 }
{ "_id" : ObjectId("4c220a42f3924d31102bd864"), "j" : 15 }
{ "_id" : ObjectId("4c220a42f3924d31102bd865"), "j" : 16 }
{ "_id" : ObjectId("4c220a42f3924d31102bd866"), "j" : 17 }
{ "_id" : ObjectId("4c220a42f3924d31102bd867"), "j" : 18 }
{ "_id" : ObjectId("4c220a42f3924d31102bd868"), "j" : 19 }
{ "_id" : ObjectId("4c220a42f3924d31102bd869"), "j" : 20 }

4.5 從聚集中返回單獨的一條文檔
通過db.collection.findOne()方法可以從MongoDB的聚集中返回一條單獨的文檔。
findOne()方法和find()方法使用同樣的參數,但是findOne()的返回值卻不是cursor!

下面的命令可以從things聚集中返回一個單獨的文檔:
db.things.findOne()

4.6 限制結果集中文檔的數量

你可以通過你的程序必須從網絡上獲得的數據的數量來強行的限制結果集的大小最終以提升
性能!(原文是:You can constrain the size of the result set to increase performance by limiting the amount of data your application must receive over the network.)

爲了指定文檔集合的最大數量,可以再cursor上調用limit()方法,命令如下:

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

MongoDB 返回如下結果:

{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章