2011-12-23 23 views
8

我正在使用MongoDB和本地節點驅動程序,並且需要準確存儲可能大於int最大值2147483647的數字。我需要能夠將數字遞增爲我正在跟蹤使用情況。我有什麼選擇?如何使用Node.js在MongoDB中存儲大數字

我正在使用貓鼬。我遇到的問題是,當我$inc過去2147483647它將數字轉換爲一倍。我如何強制Mongoose使用64位long int NumberLong

我的模式是這樣的

var schema = new Schema({ 
    ... 
    usedBandwidth: {type: Number, min: 0, default: 0} 
}); 

而且我$inc看起來像這樣

model.Account.update(
    {_id: this.account}, 
    {$inc: {usedBandwidth: this.size}}, 
    function (err, doc) {} 
); 
+0

我只是增加了一些更多的信息和代碼與貓鼬預期 – respectTheCode 2011-12-26 11:46:02

回答

7

您現在可以使用mongoose-long插件在Mongoose中執行此操作。

require('mongoose-long')(mongoose); 
var SchemaTypes = mongoose.Schema.Types; 
var schema = new Schema({ 
    ... 
    usedBandwidth: {type: SchemaTypes.Long, min: 0, default: 0} 
}); 
3

MongoDB的具有原生的64位長的整數類型,通常稱爲NumberLong(至少在MongoDB中的javascript外殼/驅動器)。如果你使用node-mongodb本地驅動程序,我相信它只是被稱爲Long(雖然我不確定這個,如果我錯了,請有人糾正我)。 $inc按預期針對NumberLong類型的字段工作。

+0

$ INC不起作用:等於或大於2^31更大的增量值(注意不是蒙戈,但貓鼬)。然後,他們突然變成了雙打。 – arik 2016-06-04 07:07:54

相關問題