MongoDB(5)- Document 文檔相關


  • MongoDB 的文檔可以理解為關系型數據庫(Mysql)的一行記錄
  • MongoDB 將數據記錄為 BSON 格式的文檔
  • BSON 是 JSON 文檔的二進制表示,但它支持的數據類型更加豐富(下一篇文章講到)

 

Documents 的結構

由鍵值對組隊(字段名:值)

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

字段的值可以是任何 BSON 數據類型,比如:其他文檔、數組、文檔數組

 

小栗子

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)
            }

上述文檔包含了以下數據類型

  • _id:ObjectId(下一篇介紹)
  • name:文檔類型的值,它又包含了 first、last 兩個字段值
  • birth、death: Date 類型的值
  • contribs:字符串數組
  • views:NumberLong 類型的值

 

字段名

首先必須是字符串,除此之外還有以下限制

 

字段名不能包含 null 字符

 

字段名為_id

  • 保留用作主鍵
  • 它的值在集合中必須是唯一的,是不可變的
  • 並且可以是數組以外的任何類型

 

最高一級的字段名不能包含 $ 字符

不過,從 MongoDB 3.6 開始,允許存儲包含 . 和 $ 符號的字段

 

字段的一些限制

  • 鍵名區分大小寫;
  • 鍵的值區分類型(如字符串和整數等)

 

栗子一

以下兩組文檔是不同的,因為值的類型不同

{"recommend":"5"}
{"recommend":5}

  

栗子二

以下兩組文檔也是不同的,因為鍵名是區分大小寫的

{ "Recommend" : " 5 "}
{"recommend":"5"}

  

關於一個文檔里面的同名字段

  • BSON文檔可能有多個同名字段
  • 但是大多數 MongoDB 接口用不支持重復字段名的結構(例如哈希表)表示MongoDB
  • 如果需要操作具有多個同名字段的文檔,需要查看 driver 驅動相關的文檔(后續介紹)
  • 一些由內部 MongoDB 進程創建的文檔可能有重復的字段,但是沒有 MongoDB 進程會將重復的字段添加到現有的用戶文檔中

 

訪問文檔

跟訪問 python 的字典一樣,都是 . 

 

訪問文檔里面的數組

"<array>.<index>"

  

數組小栗子

假設有一個文檔,想取 contribs 字段的第三個值

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

 

正確做法

contribs.2 

更多查詢數組字段的方法后面展開詳解

 

訪問文檔里面的嵌套文檔

"<embedded document>.<field>"

 

嵌套文檔小栗子

{
   ...
   name: { first: "Alan", last: "Turing" },
   contact: { phone: { type: "cell", number: "111-222-3333" } },
   ...
}

 

正確做法

name.last
contact.phone.type

更多嵌套查詢的方法后面展開詳解

 

字段值的限制

對索引字段的最大長度有限制(后面更新文章再更新這里)

 

文檔的限制

文檔大小限制

  • 最大 BSON 文檔大小為 16 mb
  • 最大文檔大小有助於確保單個文檔不能使用過多的內存,或者在傳輸過程中不能占用過多帶寬
  • 為了超過最大大小限制的文檔,MongoDB 也提供了 GridFS(后續再講)

 

文檔字段順序

默認情況下,MongoDB 在寫操作后保留文檔字段的順序,但以下情況除外

  • _id 字段永遠都是第一個字段
  • 重命名字段名的更新可能會導致文檔中字段的重新排序

 

_id 字段

  • 在 MongoDB 中,存儲在集合中的每個文檔都需要一個唯一的 _id 字段作為主鍵
  • 如果新插入的文檔沒有指定 _id 字段,那么 MongoDB 會自動為它生成一個 ObjectID(上面的截圖其實也能看到)
  • 第二條同樣適用通過 upsert:true 的更新操作(后續再講)

 

存儲 _id 值的常用選項

  • 使用 ObjectId
  • 使用自然唯一標識符(如果可用),這樣可以節省空間並避免額外的索引
  • 生成一個自動遞增的數字
  • 在應用程序代碼中生成 UUID,為了更有效地存儲集合和索引中的UUID值,將 UUID 存儲為 BSON BinData類型的值
  • 如果滿足以下條件,則 BinData 類型的索引鍵將更有效地存儲在索引中:
    • 二進制子類型值在0-7或128-135之間,並且
    • 字節數組的長度為:0、1、2、3、4、5、6、7、8、10、12、14、16、20、24或32。
  • 使用驅動程序的BSON UUID工具生成UUID。

 


免責聲明!

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



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