MongoDB中的基礎概念:Databases、Collections、Documents


MongoDB以BSON格式的文檔(Documents)形式存儲。Databases中包含集合(Collections),集合(Collections)中存儲文檔(Documents)。

BSON是一個二進制形式的JSON文檔,它比JSON包含更多的數據類型。對於BSON規格,可參見bsonspec.org,也可參考BSON類型

Databases

在MongoDB中,databases保存文檔(Documents)的集合(Collections)。

在Mongo Shell中,通過使用use <db>命令來選中database,就像下面的例子:

use myDB

創建Database

如果database不存在,MongoDB會在第一次為database存儲數據的時候創建。因此,你可以直接切換到一個不存在的數據庫,然后執行下面的語句:

use myNewDB

db.myNewCollection1.insert( { x: 1 } )

insert()操作會創建名為myNewDB的database和名為myNewCollection1的collection(如果他們不存在的話)。

Collections

MongoDB在collections中存儲文檔(documents)。Collections類似於關系型數據庫中的表(tables)。

創建Collection

如果collection不存在,MongoDB會在第一次為collection存儲數據的時候創建。

db.myNewCollection2.insert( { x: 1 } )
db.myNewCollection3.createIndex( { y: 1 } )

無論是insert()還是createIndex()操作,都會創建它們各自指定的收集,如果他們不存在的話。

顯式創建

MongoDB提供db.createCollection()方法來顯式創建一個collection,同時還能設置各種選項,例如:設置最大尺寸和文檔校驗規則。如果你沒有指定這些選項,那么你就不需要顯式創建collection,因為MongoDB會在你創建第一個數據的時候自動創建collection。

若要修改這些collection選擇,可查看collMod

Documents校驗

3.2.x版本新增內容。

默認情況下,collection不要求文檔有相同的結構;例如,在一個collection的文檔不必具有相同的fields,對於單個field在一個collection中的不同文檔中可以是不同的數據類型。

從MongoDB 3.2開始,你可以在對collection進行update和insert操作的時候執行文檔(documents)校驗規則。具體可參見文檔驗證的詳細信息

Documents

Document結構

MongoDB的文件是由field和value對的結構組成,例如下面這樣的結構:

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

value值可以是任何BSON數據類型,包括:其他document,數字,和document數組。

例如下面的document,包含各種不同類型的值:

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: {
first: "Alan", last: "Turing"
},
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}

上面例子中的各fields有下列數據類型:

  • _id:ObjectId類型
  • name:一個嵌入的document,包含first和last字段
  • birth和death:Date類型
  • contribs:字符串數組
  • views:NumberLong類型

Field名

Field名是一個字符串。

Documents中的filed名有下列限制:

  • _id被保留用於主鍵;其值必須是集合中唯一的、不可變的、並且可以是數組以外的任何數據類型
  • 不能以美元符號$開頭
  • 不能包含點字符.
  • 不能包含空字符

Field Value限制

對於索引的collections,索引字段中的值有最大長度限制。詳情請參見Maximum Index Key Length

圓點符號

MongoDB中使用圓點符號.訪問數組中的元素,也可以訪問嵌入式Documents的fields。

Arrays數組

通過圓點符號.來鏈接Arrays數組名字和從0開始的數字位置,來定位和訪問一個元素數組:

"<array>.<index>"

舉例:對於下面的document:

{
...
contribs: [ "Turing machine", "Turing test", "Turingery" ],
...
}

要訪問contribs數組中的第三個元素,可以這樣訪問:

"contribs.2"
嵌入式Documents

通過圓點符號.來鏈接嵌入式document的名字和field名,來定位和訪問嵌入式document:

"<embedded document>.<field>"

舉例:對於下面的document:

{
...
name: { first: "Alan", last: "Turing" },
...
}

要訪問name中的last字段,可以這樣使用:

"name.last"

Documents限制

Documents有下面這些屬性和限制:

Document大小限制

每個BSON文檔的最大尺寸為16兆字節。

最大文檔大小有助於確保一個單個文檔不會使用過量的內存,或通信過程中過大的帶寬占用。

若要存儲超過最大尺寸的文檔,MongoDB提供了GridFS API。可以看mongofiles和更多有關GridFS的文檔

Document Field順序

MongoDB中field的順序默認是按照寫操作的順序來保存的,除了下面幾種情況:

  • _id總是document的第一個field
  • 可能會導致文檔中的字段的重新排序的更新,包括字段名重命名。

在2.6版本起,MongoDB開始積極地嘗試保留document中field的順序。

_id字段

_id字段有以下行為和限制:

  • 默認情況下,MongoDB會在創建collection時創建一個_id字段的唯一索引
  • _id字段總是documents中的第一個字段。如果服務器接收到一個docuement,它的第一個字段不是_id,那么服務器會將_id字段移在開頭
  • _id字段可以是除了array數組之外的任何BSON數據格式

以下是存儲_id值的常用選項:

  • 使用ObjectId
  • 最好使用自然的唯一標識符,可以節省空間並避免額外的索引
  • 生成一個自動遞增的數字。請參閱創建一個自動遞增序列字段
  • 在您的應用程序代碼中生成UUID。為了更高效的在collection和_id索引中存儲UUID值,可以用BSON的BinData類型存儲UUID。

大部分MongoDB驅動客戶端會包含_id字段,並且在發送insert操作的時候生成一個ObjectId。但是如果客戶端發送一個不帶_id字段的document,mongod會添加_id字段並產生一個ObjectId


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM