Как хранить большие числа в MongoDB с Node.js - PullRequest
8 голосов
/ 23 декабря 2011

Я использую MongoDB с собственным драйвером узла, и мне нужно точно хранить числа, которые могут быть больше, чем максимум int 2147483647. Мне нужно будет иметь возможность увеличивать число, поскольку я отслеживаю использование. Какие у меня варианты?

Я использую Mongoose. У меня проблема в том, что когда я $inc мимо 2147483647, он конвертирует число в двойное число. Как я могу заставить Mongoose использовать 64-битную длину 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) {}
);

Ответы [ 2 ]

7 голосов
/ 28 февраля 2013

Теперь вы можете сделать это в Mongoose с помощью плагина mongoose-long.

require('mongoose-long')(mongoose);
var SchemaTypes = mongoose.Schema.Types;
var schema = new Schema({
    ...
    usedBandwidth: {type: SchemaTypes.Long, min: 0, default: 0}
});
3 голосов
/ 23 декабря 2011

MongoDB имеет собственный 64-битный длинный целочисленный тип, обычно называемый NumberLong (по крайней мере в оболочке / драйвере MongoDB javascript).Если вы используете драйвер node-mongodb-native, я считаю, что он просто называется Long (хотя я не уверен в этом, кто-то, пожалуйста, поправьте меня, если я не прав).$inc работает должным образом с полями типа NumberLong.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...