MongoDB中數據類型double,NumberLong,NumberInt或簡單Integer之間的主要區別(大小,速度等)是什麼?NumberLong與簡單Integer之間的MongoDB區別?
如果我想保存一個小的固定數字(介於0和1000之間),我應該使用哪種數據類型?
MongoDB中數據類型double,NumberLong,NumberInt或簡單Integer之間的主要區別(大小,速度等)是什麼?NumberLong與簡單Integer之間的MongoDB區別?
如果我想保存一個小的固定數字(介於0和1000之間),我應該使用哪種數據類型?
NumberInt
默認情況下,蒙戈外殼將所有編號爲浮點值。 mongo shell提供NumberInt()
構造函數來顯式指定32位整數。
NumberLong
默認情況下,蒙戈外殼將所有編號爲浮點值。 mongo shell提供了NumberLong()
類來處理64位整數。
的NumberLong()
構造接受只要一個字符串:
NumberLong("2090845886852")
NumberLong和NumberInt是在MongoDB的殼的MongoDB但JavaScript函數不數據類型。 MongoDB中
數據類型在BSON規範中定義:http://bsonspec.org/spec.html
號碼存儲爲類型0×01(浮點),類型爲0x10(32位整數)或類型0×12(64位整數)。
如果您在MongoDB shell中插入或更新文檔,那麼NumberLong將創建一個64位整數,NumberInt將創建一個32位整數,並且一個常規JavaScript編號將創建一個浮點值。這是因爲JavaScript中沒有整數,只有浮點數。
輸出在MongoDB的外殼示出了浮點數和32位整數,如JavaScript號碼,而64位整數被示爲調用NumberLong:
> db.inttest.insert({f: 1234, i: NumberInt("1234"), l: NumberLong("1234")})
> db.inttest.findOne()
{
"_id" : ObjectId("5396fc0db8e0b3e2dedb59b0"),
"f" : 1234,
"i" : 1234,
"l" : NumberLong(1234)
}
不同的MongoDB驅動程序提供插入的不同的方法不同類型的數字。例如,如果向BSONObjectBuilder附加一個「long long」值,C++驅動程序會創建一個64位整數。
只要數字相等,查詢就會匹配。在上面的例子中,查詢
> db.inttest.find({i:1234})
> db.inttest.find({l:1234})
> db.inttest.find({f:1234})
> db.inttest.find({i:NumberLong("1234")})
> db.inttest.find({l:NumberLong("1234")})
> db.inttest.find({f:NumberLong("1234")})
全部匹配插入的文檔。
本機int是32位,而numberlong允許64位,一個小的整數,你可以只使用整數的本地表示 – Sammaye