摘要:類型數字別名注意已過時布爾日期正則表達式位整數時間戳位整數要確定字段的類型,請查看在中檢驗類型。是位整數,代表自紀元年月日以來的毫秒數。
BSON是一個用來存儲文檔的二進制序列化格式,并且可以在MongoDB中遠程調用。該BSON規范位于bsonspce.org。
BSON在文檔中支持下列數據類型作為值。每個數據類型都有相對應的數字和字符串別名用 $type 操作執行BSON類型來查詢文檔。
類型 | 數字 | 別名 | 注意 |
---|---|---|---|
Double | 1 | “double” | ? |
String | 2 | “string” | ? |
Object | 3 | “object” | ? |
Array | 4 | “array” | ? |
Binary data | 5 | “binData” | ? |
Undefined | 6 | “undefined” | 已過時 |
ObjectId | 7 | “objectId” | ? |
Boolean (布爾) | 8 | “bool” | ? |
Date (日期) | 9 | “date” | ? |
Null | 10 | “null” | ? |
Regular Expression (正則表達式) | 11 | “regex” | ? |
DBPointer | 12 | “dbPointer” | ? |
JavaScript | 13 | “javascript” | ? |
Symbol | 14 | “symbol” | ? |
JavaScript (with scope) | 15 | “javascriptWithScope” | ? |
32-bit integer (32位整數) | 16 | “int” | ? |
Timestamp (時間戳) | 17 | “timestamp” | ? |
64-bit integer (32位整數) | 18 | “long” | ? |
Min key | -1 | “minKey” | ? |
Max key | 127 | “maxKey” | ? |
要確定字段的類型,請查看在Mongo Shell 中檢驗類型。
如果你像轉換BSON到JSON,請參閱JSON擴展。
當比較不同BSON類型的值,MongoDB使用下面的比較順序,從低到高:
MinKey (內部類型)
Null
Numbers (ints, longs, doubles)
Symbol, String(字符串)
Object(對象)
Array(數組)
BinData
ObjectId
Boolean(布爾)
Date(日期)
Timestamp(時間戳)
Regular Expression(正則表達式)
MaxKey
MongoDB對待一些類型是相等的,以便于比較。例如,數字類型在比較之前先進行轉換。
3.0版本發生變化:Date對象在Timestamp對象之前。此前Date對象和Timestamp對象在同一等級。
比較一個不存在的字段,他可能是一個空的BSON對象。因此,在文檔中一個字段排序,在文檔{}和{a: null}中字段排序,這兩個文檔在排序時將會被看成是等同的。
至于數組, 小于比較或者升序排序比較數組的最小元素,大于比較或者降序排序比較數組的最大元素. 因此,當比較的值是單元素數組(比如[1])和非數組字段(比如2)時, 結果在1小于2。空數組的比較(比如 [])當成沒有null或者缺少字段的空數組。
MongoDB按照以下順序對BinData排序:
首先, 數據的長度大小。
然后, BSON一個字節的子型。
最后,對于數據,進行逐字節比較。
以下各部分主要描述特定BSON類型的特殊注意事項。
ObjectIdObjectIds 是小的,唯一的,快速生成的,可排序的。 ObjectId 值由12個字節組成,其中ObjectId的前四個字節能夠表現出一個創建的時間戳,特別是:
一個4字節的代表Unix紀元以來的所有秒數的值
一個3字節的機器標識符
一個2字節的進程ID
一個3字節的計數器,包含一個隨機值
在MongoDB中, 在一個集合中存儲文檔需要一個唯一的_id字段來充當主鍵。如果在文檔中未指定_id字段,MongoDB會使用ObjectId作為_id字段的默認值;例如:如果一個文檔在插入的時候頂級字段不包含_id,Mongodb驅動會增加一個包含ObjectId的_id字段。
此外,如果mongod接收到的要插入的文檔并不包含_id字段(例如通過更新操作執行upsert選項), mongod將會在文檔的開頭添加一個值為ObjectId的_id字段。
MongoDB 客戶端應該添加一個帶有唯一的ObjectId值的_id字段。使用 ObjectId 作為_id字段提供了以下額外的好處:
在Mongo Shell中,你可以訪問ObjectId的創建時間,使用ObjectId.getTimestamp()模塊。
在存儲ObjectId值的_id字段上排序,大致相當于通過創建時間排序。
String重要:ObjectId值和生成時間的順序關系在一秒內并不是完全一致的。如果多個系統, 或者多個進程或者線程在單一系統生成的一秒內的值; ObjectId值并不表示一個嚴格的插入順序。 不同客戶端間的時鐘偏移也可以導致一個非嚴格的值的排序,因為值是不同客戶端之間產生的ObjectId值。
另請參閱:ObjectId()
BSON字符串是UTF-8。一般來說,當序列化和反序列化BSON時,每個編程語言的驅動都會從語言的字符串格式轉化為UTF-8格式。 這使得能夠非常容易的在BSON中存儲大多數國際字符。[1] 此外, MongoDB $regex 查詢在正則表達式字符串時支持UTF-8。
[1]考慮到字符串使用UTF-8字符集,在字符串上使用sort()將是非常合理的。然而,因為內部sort()使用C++ strcmp api,在處理某些字符的排序的時候可能順序會不正確。
TimestampsBSON 在MongoDB中使用一個特定的時間戳類型,并且不與常規的Date類型相關聯。時間戳的值是一個64位的值,其中:
第32位是一個 time_t 值 (自Unix紀元的秒數)
第二個32位是一個在給定的秒內操作順序遞增的。
在單臺mongod實例中,時間戳值總是唯一的。
在復制時,oplog有一個ts字段。這個字段的使用了BSON時間戳的值反映了操作時間。
注意: MongoDB中內部使用BSON 時間戳類型。在大多數情況下,在應用程序中開發,你將希望使用BSON時間類型。查看Date獲取更新信息。
如果你插入一個包含頂級字段中包含一個空的BSON時間戳文檔,MongoDB服務器會將空的時間戳替換為當前時間戳的值。例如,如果你創建一個插入帶有時間戳的文檔,在下面的插入操作中:
var a = new Timestamp(); db.test.insert( { ts: a } );
然后,db.test.find()操作將會一個類似下面的文檔:
{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }
如果ts是內嵌文檔的一個字段,服務器將會把它作為一個空的時間戳值。
2.6版本發生改變:在此之前, 服務器只會在插入文檔的第一二個字段替換空的時間戳值,包含_id字段。現在MongoDB將只會替換頂級字段。
DateBSON Date 是64位整數,代表自Unix紀元(1997年1月1日)以來的毫秒數。 這個結果的可表示日期范圍是在過去和將來總共 2.9億年。
官方BSON風格指定BSON的Date類型為UTC時間。
BSON Date 類型是有符號的。[2] 負值表示1970年之前的日期。
示例:在 Mongo Shell中使用new Date()來構造一個Date對象:
var mydate1 = new Date()
在 Mongo Shell 中使用ISODate()來構造一個Date對象:
var mydate2 = ISODate()
將Date的值作為字符串返回:
mydate1.toString()
返回Date值的月份部分;月份是從0開始索引,所以一月份是0:
mydate1.getMonth()
[2]在2.0版本之前,Date值被錯誤的解釋為無符號整數,這影響了排、范圍查詢和Date字段的索引。如果你在更早的版本中創建Date字段上創建了一個索引,因為升級的時候不會創建索引,請重新創建, 在1070年之前的日期是跟你的應用相關的。
下一章:https://segmentfault.com/a/11...
本文地址:https://docs.mongodb.com/manu...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18881.html
摘要:使用文檔來存儲數據紀錄。是文檔的二進制表示。文檔的局限性文件有以下屬性文檔大小限制文檔的最大值為。存儲的文檔的大小超過了最大值,提供。在版本之前,不會盡量維持原文檔中的字段順序。更新文檔更新文檔使用更新操作中指定字段去執行指定數據的修改。 MongoDB使用BSON文檔來存儲數據紀錄。BSON是JSON文檔的二進制表示。盡管它比JSON包含更多的數據類型。對于BSON規范,查看bson...
摘要:嚴格模式模式是一個位有符號整數。你必須包含括號,否則將會被解釋為浮點數,導致準確性的損失。例如,下列命令是把帶括號和不帶括號的整數值作為一個來插入當你檢索文檔的時候,未加引號的值已經發生了改變,加引號保證了其的準確性下一章原文來源 JSON 所支持的類型僅是 BSON 所支持的一部分(子集). 不僅保留了類型信息, MongoDB 還為 JSON 格式增加了以下擴展: 嚴格模式. B...
摘要:例如,在集合中的數據紀錄在數據庫中的集合。因此,你可以切換到一個不存在的數據庫,并且在中執行以下操作如果它們不存在的時候,創建了數據庫和集合。限制數據庫名字的列表,請參閱命名限制。集合在集合中存儲文檔。集合是類似關系數據庫的表。 MongoDB 存儲BSON文檔。例如,在集合中的數據紀錄;在數據庫中的集合。showImg(https://segmentfault.com/img/bVC...
摘要:是的簡稱,是一個文檔對象的二進制編碼格式。有以下三個特點輕量級跨平臺效率高命名空間存儲對象到這一系列的數據庫名和名被稱為一個命名空間。 mongodb由C++寫就,其名字來自humongous這個單詞的中間部分,從名字可見其野心所在就是海量數據的處理。關于它的一個最簡潔描述為:scalable, high-performance, open source, schema-free, d...
摘要:在這里談一談實踐過程中遇到的問題,基礎的用法不再說明了,可以自行百度。一般傳入的參數為。當然中的聚合命令不止這些,用法大同小異如果要實現一些高級功能,的基本命令滿足不了你,可能就要使用這個了。 前言 最近在項目中使用mongodb進行簡單的數據分析,在使用mongodb驅動mgo時遇到一些問題,比如在mongodb中執行命令成功,到了mgo中就執行失敗。在這里談一談實踐過程中遇到的問題...
閱讀 2236·2021-11-24 11:15
閱讀 3080·2021-11-24 10:46
閱讀 1378·2021-11-24 09:39
閱讀 3924·2021-08-18 10:21
閱讀 1478·2019-08-30 15:53
閱讀 1395·2019-08-30 11:19
閱讀 3321·2019-08-29 18:42
閱讀 2321·2019-08-29 16:58