我正在使用Mongoose和Node.js
模型的架构如下:
let orderSchema = new Schema({
'product': String,
'orderNumber': Number,
'totalPrice': Number,
'customer': {
'type': Schema.Types.ObjectId,
'ref': 'Users'
});
我想将orderNumber设置为无损整数。
在MongoDB中有什么方法吗?
我不想使用预钩技术
答案 0 :(得分:1)
您需要创建一个包含计数器和一个plugin的集合,其中包含两个钩子:
schema.pre
-获取计数器的当前值schema.post
-保存计数器的新值计数器架构如下所示:
const conterSchema = new Schema({
name: String,
value: Number
});
虽然插件可以这样定义:
function incrementOrderNumber (schema) {
schema.pre('save', next => {
CounterModel.findOne({ name: 'orderNumberCounter' })
.then(counterDoc => counterDoc.toObject())
.then(({ value}) => {
this.orderNumber = value;
next();
});
});
schema.post('save', next => {
CounterModel.findOneAndUpdate({ name: 'orderNumberCounter' }, { $inc: { value: 1 }}).exec();
});
}
创建了此类插件功能后,您需要将其插入到架构中:
orderSchema.plugin(incrementOrderNumber);
不要忘记将orderNumberCounter
插入counters
集合中。