微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript-Mongodb在架构级别生成默认随机数会生成相同的数字

我使用mongodb作为数据库,而将mongoose作为ORM.我的架构中有一个字段Booking_id是唯一的,所以我不能将其为null.因此,我将代码设计如下.

  var bookingSchema = new Schema({
    booking_id_customer: {
        type: Number,
        default : Math.floor(Math.random()*900000000300000000000) + 1000000000000000,
        index: { unique: true }
    },

第一次可以完美运行,但是从第二次开始,我收到了重复提示错误.

    { [MongoError: E11000 duplicate key error index: xx.bookings.$booking_id_customer_1 dup key: { : 4.439605615108491e+20 }]
  name: 'MongoError',
  message: 'E11000 duplicate key error index:

我希望它会生成随机数,但是我不知道第二次出了什么问题.

解决方法:

在创建架构时,只需设置一次认值.

如果希望为每个新文档调用它,则需要将其转换为Mongoose将调用函数

default : function() {
  return Math.floor(Math.random()*900000000300000000000) + 1000000000000000
}

但是,您的代码还有另一个问题:您使用的值(900000000300000000000和1000000000000000)超过Number.MAX_SAFE_INTEGER,这可能会导致问题.

我建议使用mongoose.Types.ObjectId作为id生成器,这也是Mongoose和MongoDB用于创建(唯一)文档ID的内容

booking_id_customer : {
  type    : mongoose.Schema.Types.ObjectId,
  default : mongoose.Types.ObjectId,
  index   : { unique: true }
}

或重复使用文档的_id属性,该属性也是唯一的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐