Mongodb基本知識

Mongodb數據庫,集合,文檔

文檔:

文檔是Mongodb中的核心概念。文檔就是鍵值對的有序集合。相似於ruby中的hash,python中的dict或是javascript中的對象。javascript

能夠只有一個鍵值對,也能夠設置對個鍵值對。java

  • 文檔中的值能夠是多種不一樣的數據類型(甚至是一個內嵌的文檔),"greeting"的值是一個字符串,"foo"的值是一個整數
  • 鍵區分大小寫
  • 文檔的鍵是字符串,除了少數狀況下,鍵可使用任意的UTF8字符
    • 鍵不能含有\0(空字符)。這個字符用於表示鍵的結尾
    • .和$具備特殊意義,一般這兩個字符被保留
    • 一個文檔中不能有重複的鍵
"greeting": "Hello, World"}

{"greeting": "Hello, World", "foo": 3}

文檔中的鍵/值是有序的 {"x": 1, "y": 2}與{"y": 2, "x": 1} 是不一樣的。在某些特殊狀況下,字段順序變得很是重要。python

 

集合

簡單的來講:集合就是一組文檔,若是將Mongodb中的一個文檔比喻爲關係型數據庫中的一行,那麼一個集合就至關於一張表正則表達式

集合命名

  集合使用名稱進行表示。集合名能夠是知足下列條件的任意UTF8字符串mongodb

  • 集合名不能是空字符串("")
  • 集合名不能包含\0字符(空字符),這個字符表示集合名的結束
  • 集合名不能以"system"開頭,這是爲系統集合保留的前綴,例如, system.users這個集合保存着數據庫的用戶信息,而system.namespace集合保存着全部數據庫的集合信息
  • 用戶穿件的集合不能再集合名中保留字符「$」。由於某些系統生成的集合中包含$,不少驅動程序確實支持在集合名中包含該字符,除非你要訪問這種系統建立的集合,不然不該該在集合名中包含$

 

數據庫

在Mongodb中,多個文檔組成集合,而多個集合能夠組成數據庫。每一個數據庫擁有0個或者多個集合,每一個數據庫都有獨立的權限,即使是在磁盤上,不一樣的數據庫也防止在不一樣的文件中。按照經驗咱們把一個應用程序的全部數據都存儲在一個數據庫中。要想在MongoDB服務器上存放多個應用程序或者用戶程序就須要使用不一樣的數據庫。shell

有一些數據庫是保留的admin數據庫

  • 從身份驗證的角度來說,這是「root」數據庫。若是將一個用戶添加到admin數據庫,這個用戶將自動得到全部數據庫的權限。再者,一些特定的服務端命令也只能從admin數據庫運行,例如列出全部數據庫或者關閉服務器
  • local
    這個數據庫永遠都不能複製,且一臺服務器上的全部本地集合均可以存儲在這個數據庫中。
  • config
    MongoDB用於分片設置時,分片信息會存儲在config數據庫中

把數據庫名添加到集合名前,獲得集合的徹底限定名,即命名空間。若是要使用cms數據庫中的blog.post集合那麼這個集合的命名空間就是cms.blog.post。命名空間的長度不能超過121字節,且在實際使用中應小於100字符。數組

 

 

MongoDB shell

mongo 命令進入mongodb shell 在此shell 中能夠執行 JavaScript代碼ruby

 

MongoDB 數據類型

MongoDB基本數據類型

  • null
    null 用於表示空值或者不存在的字段:
     {"x": null} 

  • 布爾型
    布爾類型有兩個值true和false
     {"x": true} 

  • 數值
    shell默認使用64位浮點型數值,所以如下數值在shell中是很「正常的」:
     {"x": 3.14} 或 {"x": 3} 或{"x": NumberInt("3")} // 4字節帶符號整數 {"x": NumberLong("3")} // 8字節帶符號整數 

     

  • 字符串
    UTF8字符串均可以表示爲字符創類型的數據
     {"x": "foobar"} 


  • 日期
    日期被存儲爲自新紀元雨來通過的毫秒數,不儲存時區:
     {"x": new Date()} 

  • 正則表達式
    查詢時,使用正則表達式做爲限定條件,語法也和JavaScript的正則表達式語法相同:
     {"x": /foobar/i} 

  • 數組
    數據列表或數據集能夠表示爲數組:
     {"x": ["a", "b", "c"]} 

  • 內嵌文檔
    文檔可嵌套其餘文檔,被嵌套的文檔做爲父文檔的值:

     {"x": {"foo": "bar"}} 

    服務器

  • 對象ID
    對象ID是一個12字節的ID,是文檔惟一標識:
     {"x": ObjectId()} 

還有些不那麼經常使用可是有可能用獲得的類型:

  • 二進制數據
    二進制數據是任意字節的字符串,他不能直接帶shell中使用

  • 代碼
    查詢和文檔中能夠包括任意的JavaScript代碼:
     {"x": function() {/*....*/}} 

 

MongoDB shell 

shell 能夠鏈接到本地的mongod實例,並且能夠經過該shell鏈接到任何MongoDB實例

$ mongo some-host:30000/myDB
MongoDB shell version: 2.4.0
connecting to: some-host:30000/myDB
>

如今咱們就鏈接到了some-host:30000上的myDB數據庫.

也能夠經過--nodb 不鏈接任何數據庫進入shell

$ » mongo --nodb                                                                                                                            apple@apple-Pro
MongoDB shell version v4.0.3
>

啓動後能夠在須要時運行new Mongo命令就能夠鏈接MongoDB

~/Documents/demo/go_demo » mongo --nodb                                                                                                                              apple@apple-Pro
MongoDB shell version v4.0.3
> conn = new Mongo("some-host:30000")
> db = conn.getDB("myDb")
myDb
相關文章
相關標籤/搜索