在模式级别生成默认随机数的Mongodb生成相同的数字
我正在使用mongodb作为ORM的mongoose数据库。 我有一个字段booking_id在我的架构是唯一的,所以我不能让它为空。 因此我devise了这样的代码。
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:
我期望它会产生随机数字,但我不知道第二次出现什么问题。
您只需在创build模式时设置默认值一次。
如果您希望为每个新文档调用它,则需要将其转换为Mongoose将调用的函数:
default : function() { return Math.floor(Math.random()*900000000300000000000) + 1000000000000000 }
但是,您的代码还有另一个问题:您使用的值( Number.MAX_SAFE_INTEGER
和1000000000000000)超过Number.MAX_SAFE_INTEGER
,这可能会导致问题。
我build议使用mongoose.Types.ObjectId
作为id生成器,这也是Mongoose和MongoDB用来创build(唯一)文档ID的:
booking_id_customer : { type : mongoose.Schema.Types.ObjectId, default : mongoose.Types.ObjectId, index : { unique: true } }
或者重新使用文档的_id
属性,这也是唯一的。
- 我如何让Mocha加载一个helper.js文件来定义全局钩子或者实用程序?
- Node.js自定义渲染构build
- 如何validationSequelize交易,并使其看起来不错
- 通过iosocket发送数据给meteor,但不是来自Meteor客户端(搭载Meteor的io-socket)
- 使用BrowserMobProxyconfigurationWebDriverIO
- 节点js服务器的terminal中不能识别nodemon命令
- 为什么我的url在使用angular时包含“!”?
- es6模块到commonjs节点和谐旗下的打字稿
- 使用Node.js / promisses按types捕获exception