MongoDB權威指南(1)- 入門

jopen 12年前發布 | 37K 次閱讀 MongoDB NoSQL數據庫

安裝

解壓縮出來就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解釋器,讓我們來干點啥來看看

可以進行數學運算

>  x  =   200
200
>  x  /   5 ;
40

可以使用標準的javascript庫

>  Math.sin(Math.PI  /   2 );
1
>   new  Date( " 2010/1/1 " );
" Fri Jan 01 2010 00:00:00 GMT-0500 (EST) "
>   " Hello, World! " .replace( " World " " MongoDB " );
Hello, MongoDB
!

甚至可以定義javascript函數

>   function  factorial (n) {
... 
if  (n  <=   1 return   1 ;
... 
return  n  *  factorial(n  -   1 );
... }
>  factorial( 5 );
120

能夠執行javascript確實很cool,當然這不是shell的全部功能。

  • 使用use命名切換數據庫
>  use foobar
switched to db foobar

然后就可以查看db變量來看看當前數據庫是啥

>  db
foobar
  • 使用insert函數想collection插入document

先創建一個本地變量叫post

>  post  =  { " title "  :  " My Blog 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里邊去

>  db.blog.insert(post)

然后我們可以用find函數看看blog里邊的內容

>  db.blog.find()
{
" _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。

>  post.comments  =  []
[ ]

執行更新,替換掉title是“My Blog Post”的那個document

>  db.blog.update({title :  " My Blog Post " }, post)

看看結果

>  db.blog.find()
{
" _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 " })
    現在這個collection就又空了。

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
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!