2013-06-19 26 views
11

MongoDB中數據類型double,NumberLong,NumberInt或簡單Integer之間的主要區別(大小,速度等)是什麼?NumberLong與簡單Integer之間的MongoDB區別?

如果我想保存一個小的固定數字(介於0和1000之間),我應該使用哪種數據類型?

+1

本機int是32位,而numberlong允許64位,一個小的整數,你可以只使用整數的本地表示 – Sammaye

回答

18

NumberInt

默認情況下,蒙戈外殼將所有編號爲浮點值。 mongo shell提供NumberInt()構造函數來顯式指定32位整數。

NumberLong

默認情況下,蒙戈外殼將所有編號爲浮點值。 mongo shell提供了NumberLong()類來處理64位整數。

NumberLong()構造接受只要一個字符串:

NumberLong("2090845886852") 

來源:http://docs.mongodb.org/manual/core/shell-types/

+2

shell和MongoDB本身是兩個不同的東西,shell將int整理爲javascript限制的float,但MongoDB會把它們當作int來處理,因爲這裏沒有指定任何語言,所以你不能依賴int作爲浮點處理髮生的操作 – Sammaye

+0

我剛碰到一個問題 - 編輯一個字段時這不起作用。如果需要編輯,您需要先刪除該字段,然後將其保存爲所需的類型,請參閱此處:http://stackoverflow.com/questions/36894019/how-do-i-save-a-mongo-field-value-作爲長/ 36894239#36894239 – VSO

13

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

全部匹配插入的文檔。

相關問題