MongoDB權威指南(1)- 入門
安裝
解壓縮出來就OK了,mongoDB缺省使用磁盤根目錄的data文件夾和data\db文件夾,
這兩個文件夾需要手工建立,如果想使用其他路徑,那么啟動mongoDB的時候需要指明路徑
運行
運行CMD打開控制臺窗口,導航至mongodb的bin目錄,運行mongod.exe,服務器就啟動起來了,按ctrl-c結束程序。
另開一個控制臺窗口,導航至mongodb的bin目錄,運行mongo.exe來啟動shell,就鏈接到服務器了,缺省連接到test數據庫。
-------------------------------------------------------------------------------------------------------------
OK,第一章講mongoDB如何如何牛b的我們就隔過去啦,這里直接是第二章。
1.一些基本概念
document :mongoDB里邊數據的基本單位,相當于關系數據庫里的行
collection: 相當于關系數據庫的表,不過是沒有數據結構定義的
每個mongoDB的實例可以運行多個database,每個database有自己的collection和權限控制
mongoDB擁有一個強大的javascript shell,用于管理數據庫和操作數據
每個document都有一個特殊的key:"_id",這個值在collection內是唯一的
document
document是一組有序的key/value對,使用json風格的數據。
{ "foo" : 3, "greeting" : "Hello, world!" } |
key是個UTF-8字符串,value 可以是很多類型,甚至是一個嵌入的document。
collection
collection是一組document,它是無結構定義的,所以你可以把任何document存入一個collection里。
subcollection
一個習慣性的組織collection的方式,使用.號分隔,像命名空間。例如,程序里使用了一個blog,它可能包含一個collection叫 blog.post和另外一個collection叫blog.authors,這僅僅是出于組織內容的目的,它們倆看起來像是blog的子集,實際上他們沒有任何關系,甚至blog也許就是不存在的。
database
一個mongoDB的實例可以運行多個database,database之間是完全獨立的,每個database有自己的權限,每個database存儲于磁盤的不同文件。
2. mongoDB shell
shell本身就是一個javascript解釋器,讓我們來干點啥來看看
可以進行數學運算
200
> x / 5 ;
40
可以使用標準的javascript庫
1
> new Date( " 2010/1/1 " );
" Fri Jan 01 2010 00:00:00 GMT-0500 (EST) "
> " Hello, World! " .replace( " World " , " MongoDB " );
Hello, MongoDB !
甚至可以定義javascript函數
... if (n <= 1 ) return 1 ;
... return n * factorial(n - 1 );
... }
> factorial( 5 );
120
能夠執行javascript確實很cool,當然這不是shell的全部功能。
- 使用use命名切換數據庫
switched to db foobar
然后就可以查看db變量來看看當前數據庫是啥
foobar
- 使用insert函數想collection插入document
先創建一個本地變量叫post
... " content " : " Here's my blog post. " ,
... " date " : new Date()}
{
" title " : " My Blog Post " ,
" content " : " Here's my blog post. " ,
" date " : " Sat Dec 12 2009 11:23:21 GMT-0500 (EST) "
}
然后把它插入到叫blog的collection里邊去
然后我們可以用find函數看看blog里邊的內容
{
" _id " : ObjectId( " 4b23c3ca7525f35f94b60a2d " ),
" title " : " My Blog Post " ,
" content " : " Here's my blog post. " ,
" date " : " Sat Dec 12 2009 11:23:21 GMT-0500 (EST) "
}
里邊自動加了個叫"_id"的key。
- find返回collection里的書有document,如果只想查看一個使用findone
> db.blog.findOne()
{
" _id " : ObjectId( " 4b23c3ca7525f35f94b60a2d " ),
" title " : " My Blog Post " ,
" content " : " Here's my blog post. " ,
" date " : " Sat Dec 12 2009 11:23:21 GMT-0500 (EST) "
}
find和findone都可以有查詢條件,第4章查詢里邊會講。
- 使用update來更新document
update函數要有至少兩個參數,第一個是條件,第二個是新的document
先給post變量加一個叫comments的key,給它一個空數組做value。
[ ]
執行更新,替換掉title是“My Blog Post”的那個document
看看結果
{
" _id " : ObjectId( " 4b23c3ca7525f35f94b60a2d " ),
" title " : " My Blog Post " ,
" content " : " Here's my blog post. " ,
" date " : " Sat Dec 12 2009 11:23:21 GMT-0500 (EST) "
" comments " : [ ]
}
- 使用remove刪除document
> db.blog.remove({title : " My Blog Post " })
3.基本數據類型
- null
表示一個空值或者不存在的字段 - boolean
- 32位整數
shell中無法表示,javascript只支持64位浮點小數,所以會被轉化為64位浮點小數。 - 64位整數
同上 - 64位浮點小數
- 字符串
- symbol
shell不支持此類型,來自數據庫中的symbol類型數據會轉化為字符串 - object id
0 1 2 3 |4 5 6 |7 8 |9 10 11
Timestamp|Machine | PID |Increment - date
- 正則表達式
- code
- 二進制數據
- maximum value
bson有這樣一個專門的類型來表示可能的最大值,shell不支持此類型。 - minimum value
- undefined
- array
- embeded document