sac*_*hal 1 javascript mongoose mongodb node.js
我使用mongodb作为数据库,使用mongoose作为ORM.我的架构中有一个字段booking_id,这是唯一的,所以我不能将它取消.因此我设计了类似这样的代码.
var bookingSchema = new Schema({
booking_id_customer: {
type: Number,
default : Math.floor(Math.random()*900000000300000000000) + 1000000000000000,
index: { unique: true }
},
Run Code Online (Sandbox Code Playgroud)
它第一次完美运行,但从第2次开始,我得到了这个重复错误.
{ [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:
Run Code Online (Sandbox Code Playgroud)
我希望它能产生随机数,但我不知道第二次出现什么问题.
您在架构创建时只设置一次默认值.
如果您希望为每个新文档调用它,则需要将其转换为Mongoose将调用的函数:
default : function() {
return Math.floor(Math.random()*900000000300000000000) + 1000000000000000
}
Run Code Online (Sandbox Code Playgroud)
但是,您的代码还有另一个问题:您正在使用的值(900000000300000000000和1000000000000000)超出Number.MAX_SAFE_INTEGER,这可能会导致问题.
我建议使用mongoose.Types.ObjectIdid生成器,这也是Mongoose和MongoDB用来创建(唯一)文档id的方法:
booking_id_customer : {
type : mongoose.Schema.Types.ObjectId,
default : mongoose.Types.ObjectId,
index : { unique: true }
}
Run Code Online (Sandbox Code Playgroud)
或者重新使用_id文档的属性,这也是唯一的.
| 归档时间: |
|
| 查看次数: |
2300 次 |
| 最近记录: |