2011-12-23 22 views
8

ネイティブのノードドライバでMongoDBを使用しており、最大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

答えて

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は、少なくともMongoDBのJavaScriptで通常NumberLongと呼ばれるネイティブの64ビット長の整数型を、(持っているように見えるようになります。シェル/ドライバ)。 node-mongodb-nativeドライバを使用している場合、私はそれがちょうどLongと呼ばれていると信じています(私は間違っていれば誰かに教えてください)。 $incは、NumberLongのフィールドに対して期待通りに機能します。

+0

$ incは動作しないに等しいか、または2^31よりも大きなデルタ値のために。その後、彼らは突然ダブルスに変換されます。 – arik

関連する問題