Javascript 在模式级别生成默认随机数的Mongodb正在生成相同的数
我使用mongodb作为数据库,mongoose作为ORM。我的模式中有一个字段id是唯一的,因此不能为空。因此,我设计了类似这样的代码Javascript 在模式级别生成默认随机数的Mongodb正在生成相同的数,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我使用mongodb作为数据库,mongoose作为ORM。我的模式中有一个字段id是唯一的,因此不能为空。因此,我设计了类似这样的代码 var bookingSchema = new Schema({ booking_id_customer: { type: Number, default : Math.floor(Math.random()*900000000300000000000) + 1000000000000000, ind
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
}
但是,您的代码还有另一个问题:您正在使用的值(900000003000000000和1000000000000000)超过了,这可能会导致问题
我建议使用mongoose.Types.ObjectId
作为id生成器,这也是mongoose和MongoDB用来创建(唯一)文档id的:
booking_id_customer : {
type : mongoose.Schema.Types.ObjectId,
default : mongoose.Types.ObjectId,
index : { unique: true }
}
或者重新使用文档的
\u id
属性,该属性也是唯一的。在创建架构时,您只需设置一次默认值
如果希望为每个新文档调用它,则需要将其转换为Mongoose将调用的函数:
default : function() {
return Math.floor(Math.random()*900000000300000000000) + 1000000000000000
}
但是,您的代码还有另一个问题:您正在使用的值(900000003000000000和1000000000000000)超过了,这可能会导致问题
我建议使用mongoose.Types.ObjectId
作为id生成器,这也是mongoose和MongoDB用来创建(唯一)文档id的:
booking_id_customer : {
type : mongoose.Schema.Types.ObjectId,
default : mongoose.Types.ObjectId,
index : { unique: true }
}
或者重新使用文档的
\u id
属性,该属性也是唯一的。可能是由于e
的原因,MONOSE没有比较您的值。尝试使用10位数的Math.floor(Math.random()*900000003000000000+100000000000000,10)为什么不直接使用ObjectId()
?每次生成时,它都是唯一的。并且已经有一个\u id
字段包含该字段。为什么您认为您需要“另一个”唯一标识符?可能是因为e
,Monose没有比较您的值。请尝试使用10位Math.floor(Math.random()*900000003000000000+100000000000000,10)
为什么不直接使用ObjectId()
?每次生成时它都是唯一的。而且已经有一个\u id
字段包含该字段。为什么您认为需要“另一个”唯一标识符?