mongoose-int32
Usage
Requires mongoose >= 4.4.0
. Do not use with mongoose 3.x.
var Int32 = require('mongoose-int32');
API
It casts to int using Math.round()
If you declare a field of type Int32
, this module will use
Math.round()
to convert it to an integer so MongoDB can store it
properly.
const schema = new mongoose.Schema({
test: Int32
});
const Test = mongoose.model('Test', schema);
Test.create({ test: 1.49 }, function(error, doc) {
assert.equal(doc.test, 1);
// Int32.INT32_BSON_TYPE=16, see http://bsonspec.org/spec.html
const query = { test: { $type: Int32.INT32_BSON_TYPE, $eq: 1 } };
db.collection('tests').findOne(query, function(error, doc) {
assert.ifError(error);
assert.ok(doc);
});
});
It throws a CastError if outside allowed range
MongoDB int32's must be between -2147483648 and 2147483647. If the rounded value is outside of this range, that's a CastError.
const Test = mongoose.model('Test');
const doc = new Test();
doc.test = 0x7FFFFFFF + 1;
assert.ok(doc.validateSync() instanceof mongoose.Error);
assert.equal(doc.validateSync().errors['test'].name, 'CastError');
assert.equal(doc.validateSync().errors['test'].message,
'Cast to Int32 failed for value "2147483648" at path "test"');
It throws a CastError if not a number
If the Number
constructor
doesn't recognize the value as a valid number, that's a
CastError.
const Test = mongoose.model('Test');
const doc = new Test();
doc.test = 'NaN';
assert.ok(doc.validateSync() instanceof mongoose.Error);
assert.equal(doc.validateSync().errors['test'].name, 'CastError');
assert.equal(doc.validateSync().errors['test'].message,
'Cast to Int32 failed for value "NaN" at path "test"');
It works with required validators
const schema = new mongoose.Schema({
strips: { type: Int32, required: true }
});
const Bacon = mongoose.model('Bacon', schema);
const doc = new Bacon();
assert.ok(doc.validateSync() instanceof mongoose.Error);
assert.equal(doc.validateSync().errors['strips'].name, 'ValidatorError');
assert.equal(doc.validateSync().errors['strips'].message,
'Path `strips` is required.');
It works with queries
const schema = new mongoose.Schema({
strips: { type: Int32, required: true }
});
const Bacon = mongoose.model('Bacon');
Bacon.create({ strips: 4 }, function(error) {
assert.ifError(error);
Bacon.findOne({ strips: { $gt: 2 } }, function(error, bacon) {
assert.ifError(error);
assert.equal(bacon.strips, 4);
});
});
Changelog
0.4.1 / 2020-07-21
- fix: correctly format error messages for Mongoose 5.9 #8
0.4.0 / 2020-06-25
- fix: handle null values #8 russelgauthier
0.3.1 / 2018-10-12
- docs: add link to homepage on plugins.mongoosejs.io
- docs: add changelog
0.3.0 / 2018-04-30
- feat: add support for Mongoose 5
0.2.0 / 2016-11-13
- feat: support query conditionals