日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

mongodb查询值不为空_NoSQL之MongoDB——BSON与JSON类型

發布時間:2023/12/15 javascript 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb查询值不为空_NoSQL之MongoDB——BSON与JSON类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BSON類型

BSON是一種用來存儲文檔和MongoDB執行遠程調用的二進制序列化格式。BSON規范位于bsonspec.org。

BSON支持以下數據類型,每種數據類型都有一個相應的數字和字符串別名,可以使用別名和$type操作符基于類型匹配模式檢索文檔。

比較/排序順序

當比較不同BSON類型的值時,MongoDB使用下面的比較順序,從最低到最高:

1.MinKey (內部類型)

2.Null

3.Numbers (ints, longs, doubles)

4.Symbol, String

5.Object

6.Array

7.BinData

8.ObjectId

9.Boolean

10.Date

11.Timestamp

12.Regular Expression

13.MaxKey (內部類型)

對于比較而言,MongoDB將一些類型看作是等價的。例如,數值類型在比較之前執行轉換。

3.0.0版本的變化:Date排在Timestamp 之前。之前的版本,Date和Timestamp 排序相同。

對于比較而言,MongoDB將不存在的字段看作空BSON 對象,例如,對{ } 和{ a: null }在排序中被看作是等價的。

對于數組而言,小于比較或者升序排序比較的是數組中最小的元素,大于比較或者降序排序比較的是數組中最大的元素。例如,比較一個只有一個元素的數組類型字段(例如 [ 1 ]))和非數組字段(例如2),比較的是1和2。

空數組(例如[])的比較被看作是小于空(null)或被看作丟失的字段。

對于BinData 類型,按下面順序排序:

1.首先,按數據的長度或大小排序。

2.然后,按BSON一個字節子類型排序。

3.最后,一個字節一個字節地比較。

下面的章節針對特定的BSON類型描述了特別的注意事項:

ObjectId

ObjectId占據存儲空間小、唯一、可被快速生成和索引。ObjectId類型值為12字節,前四個字節是一個時間戳,表示其被創建的時間:

  • 前四個字節表示從UNIX新紀元來的秒數。
  • 接下來的三個字節表示機器編號。
  • 接下來的兩個字節表示進程ID。
  • 最后三個字節表示以隨機數開始的計數。

在MongoDB中,集合中的文檔需要一個作為主鍵的唯一_id字段,如果沒有指定_id字段,MongoDB默認將ObjectId類型值作為_id字段值。例如,待插入文檔不包含頂級_id字段,MongoDB驅動就會添加一個ObjectId類型的_id字段。

另外,如果mongod接收的待插入文檔不包含_id字段,mongod將會添加一個ObjectId類型的_id字段。

MongoDB 客戶端應該添加一個值為ObjectId的_id字段,使用值為ObjectId的_id字段有如下好處:

  • 在mongo shell中,你可以使用ObjectId.getTimestamp() 方法獲得ObjectId創建的時間。
  • 給值為ObjectId的_id字段排序大體等價于按時間排序。

重要的:

在一秒之內,ObjectId值的順序與生成時間之間的關系并不是嚴格的。如果單系統中,多個系統或多個進程或多個線程在一秒內產生了多個ObjectId值,這些值并不會嚴格地按照插入順序展示。多客戶端之間的時鐘偏移也會導致不嚴格排序,即使這些值由客戶端驅動程序生成。

String

BSON 的String類型是UTF-8編碼的。一般來說,每種語言對應的驅動程序在執行序列化和反序列化BSON時將語言自身的string類型轉換為UTF-8編碼,這使得BSON string可以接受大多數國際字符。另外,使用$regex 查詢支持UTF-8編碼的正則表達式字符。

Timestamp

BSON 中有一個特殊的時間戳類型供MongoDB內部使用,并且不能和Date 配合使用。時間戳類型是64位的值:

  • 第一個32位是time_t的值(從UNIX新紀元來的秒數)。
  • 第二個32位是給定時間里一些操作的遞增序號。

在一個mongod實例中,時間戳的值是唯一的。

在復制功能中,oplog有一個ts字段,字段值使用DSON時間戳,它反映了操作時間。

注:

BSON時間戳類型(Timestape)是供MongoDB內部使用的。大多數情況下,開發應用程序時使用Date類型。

如果你所插入文檔的頂級字段是一個空值的時間戳類型(Timestape),MongoDB 服務器將會用當前的時間戳(Timestape)替換它。例如執行下面的操作:

var a = new Timestamp();

db.test.insert( { ts: a } );

然后,使用db.test.find()方法查詢,返回結果為:

{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }

如果ts是嵌入式文檔的一個字段,服務器會保持其為空值。

2.6版本中的變化:以前當插入文檔時,服務器僅僅會替換頭兩個空值時間戳類型(Timestape)字段,包括_id字段。現在服務器會替換任何的頂級字段。

Date

BSON 日期類型是64位整型,表示從UNIX新紀元(Jan 1, 1970)來的毫秒數。這一結果表示了可表達的約2億9000萬年范圍內的過去和未來。

官方的BSON規范指出DSON日期類型是通用協調時間(UTC datetime)。

BSON日期類型是有符號的,負值表示1970年之前的日期。

例如:

在mongo shell中,使用new Date()構建日期:var mydate1 = new Date()

在mongo shell中,使用ISODate()構建日期:var mydate2 = ISODate()

返回時間值的字符串:mydate1.toString()

返回日期中的月份,日期是基于0索引的,所以一月份就是:mydate1.getMonth()

MongoDB對JSON的擴展

JSON所表示的類型僅是BSON數據類型的子集。為了表示類型信息,MongoDB對JSON做如下擴展:

  • strict模式。BSON類型的strict模式形式符合JSON RFC。任何的JSON分析器都能夠分析這些鍵值對形式的strict模式形式。然而,僅MongoDB內部的JSON分析器識別轉化為這種格式的信息。
  • mongo Shell模式。MongoDB內部的JSON分析器和mongo shell都能解析這種模式。

這種形式被用于各種數據類型,這些類型依賴于JSON被解析的上下文環境。

解析器和支持的格式

以strict模式輸入

以下能夠解析strict模式形式,識別類型信息。

  • REST Interfaces
  • mongoimport
  • 各種MongoDB工具的查詢選項

其他的JSON解析器,包括mongo shell 和db.eval()能夠解析鍵值對形式的strict模式表示,但是不能夠識別類型信息。

以mongo Shell 模式輸入

以下能夠解析mongo Shell模式表達,識別類型信息。

  • REST Interfaces
  • mongoimport
  • 各種MongoDB工具的查詢選項
  • mongo shell

以strict模式輸出

mongoexport 和REST and HTTP Interfaces以Strict模式輸出數據。

以mongo Shell 模式輸出

bsondump以mongo Shell 模式輸出數據。

BSON數據類型和相關的描述

下面展示了strict模式和mongo Shell模式的一些BSON數據類型及相關描述。

Binary

  • 是base64編碼形式的二進制字符串
  • 表示用一個字節指明數據類型。在strict模式中它是十六進制字符串,在mongo Shell模式中它是整數。

Date

在strict模式中,是ISO-8601數據格式的強制性時區字段,它的模板為:YYYY-MM-DDTHH:mm:ss.mmm。

當前的MongoDB JSON解析器不支持加載Unix新紀元之前的ISO-8601 字符串日期。當格式化系統的time_t 類型的紀元之前和之后的時間時,采用下面的格式:{ "$date" : { "$numberLong" : "" } }

在Shell 模式中,是一個64字節有符號整數的JSON形式,這個整數的表示形式為協調世界時間(UTC)的毫秒數。

Timestamp

  • 為32位無符號整型UTC毫秒形式的JSON表達
  • 為自增的32位無符號整型

Regular Expression(正則表達式)

  • 是由有效的JSON字符構成的字符串
  • 是由有效的JSON字符和轉義雙引號字符構成的字符串,但可能不包含轉義的正斜杠(/),
  • 是一個包含以字母表示的正則表達式選項的字符串
  • 是一個僅可能包含‘g’, ‘i’, ‘m’ 和‘s’ 的字符串,因為JavaScript和Mongo shell表示支持有限的選擇范圍,當轉化成這種表示時,不合格選項將被丟棄。

OID

DB Reference

  • 是由有效的JSON字符構成的字符串。
  • 是任何有效的JSON擴展類型。

Undefined Type

表示為JavaScript/BSON中未定義類型。

查詢文檔時不能使用未定義類型。將下面的文檔插入people 集合:

db.people.insert( { name : "Sally

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mongodb查询值不为空_NoSQL之MongoDB——BSON与JSON类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。