2011-12-23 37 views
8

Tôi đang sử dụng MongoDB với trình điều khiển nút gốc và cần lưu trữ chính xác các số có thể lớn hơn số tối đa int 2147483647. Tôi sẽ cần để có thể tăng số Tôi đang theo dõi việc sử dụng. Những lựa chọn của tôi là gì?Làm thế nào để lưu trữ số lớn trong MongoDB với Node.js

Tôi đang sử dụng Mongoose. Vấn đề tôi gặp phải là khi tôi $inc qua 2147483647 nó chuyển đổi số thành một đôi. Làm thế nào tôi có thể buộc Mongoose sử dụng 64-bit dài int NumberLong?

schema của tôi trông như thế này

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

$inc của tôi trông như thế này

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

Tôi vừa thêm một số thông tin và mã – respectTheCode

Trả lời

7

Bây giờ, bạn có thể thực hiện việc này ở Mongoose bằng plugin mongoose-long.

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

MongoDB có 64-bit kiểu số nguyên dài bản địa, thường được gọi là NumberLong (ít nhất là trong javascript MongoDB shell/driver). Nếu bạn đang sử dụng trình điều khiển gốc-mongodb-nút, tôi tin rằng nó chỉ được gọi là Long (mặc dù tôi không chắc chắn về điều này, một người nào đó hãy sửa tôi nếu tôi sai). $inc hoạt động như mong đợi đối với các trường thuộc loại NumberLong.

+0

$ inc không hoạt động như mong đợi với Mongoose (lưu ý: không Mongo, nhưng Mongoose) cho giá trị delta bằng hoặc lớn hơn 2^31. Sau đó, họ đột nhiên kết thúc được chuyển đổi thành đôi. – arik

Các vấn đề liên quan