我使用 mongodb 作为数据库,使用 mongoose 作为 ORM。我的模式中有一个 booking_id 字段,它是唯一的,所以我不能让它为空。因此,我设计了类似这样的代码。
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
属性,也是唯一的。
关于javascript - Mongodb 在模式级别生成默认随机数正在生成相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44840482/