我正在构建一个节点应用程序,mongodb通过mongoose。
我为我的人物模型定义了Number
类型的“电话”字段
我没有任何问题,可以节省~550人
当我尝试保存具有特定号码的人(“3932978 ***”,出于隐私原因而隐藏最后3位数字)时,我收到了投射错误:
... at process._tickCallback (node.js:355:11)","message":"Cast to Number failed for value \"3932978***\" at path \"phone\"","name":"CastError","kind":"Number","value":"3932970***","path":"phone"}}}
我是否有可能达到Mongoose Number
限制?实际上,这个数字似乎是其他电话号码值中最大的,但它并不接近2的幂......
我完全糊涂了......你能解释一下吗?
更新:我根据评论中的要求添加了我使用的Javascript代码...
档案models/person.js
:
var personSchema = new mongoose.Schema({
key: String,
providerKey: String,
name: String,
phone: Number,
...
},
{
autoIndex: config.debug,
collection: 'persons'
});
personSchema.index({ providerKey: 1, key: 1 }, { unique: true });
module.exports = mongoose.model('Person', personSchema);
...
档案controllers/person.js
:
var _ = require('lodash')
var Person = require('../models/person');
...
var upsert = function(person, callback) {
Person.findOne(
{ providerKey: person.providerKey, key: person.key },
function(err, doc) {
if (err) {
log.warn('could not find person ', person.name, ':', err);
return callback(err);
}
if (doc) { // person did already exist
_.merge(doc, person);
} else { // person did not exist before
doc = new Person();
_.merge(doc, person);
}
doc.save(function(err) {
if (err) {
log.warn('could not save person ', doc.providerKey, ' ', doc.key, ':', err);
return callback(err);
}
callback(null);
});
}
);
};
...
var person = {};
person.phone = getParseNormalizePhoneAndReturn10DigitsStringOrNull();
upsert(person, function(err) {
...
});
希望它有所帮助...
更新2 :
我使用的是节点v0.12.7和mongoose 4.1.12
导致播放错误的第一个“数字”是“3932978 ***”,而导致任何错误的最大不是“3927983 ***”。
我必须补充一点,我在person
集合中注意到有一些'浮点'数字(当开始填充集合时,规范化函数可能存在一些问题,并且一些dot
没有删除...所以我有几个这样的数字:“320.2264 ***”,如果这可以帮助......