猫鼬:数字类型限制是什么?

时间:2015-11-04 19:45:19

标签: node.js mongodb mongoose

我正在构建一个节点应用程序,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 ***”,如果这可以帮助......

0 个答案:

没有答案