我正在为发票实施MongoDB架构。
我想知道如何增加插入时的id
字段?
问题是我需要id才能领先0。
例如,系统中的第一张发票应具有以下ID:
0000001
我需要这个能够向用户显示发票序列号。
var InvoiceSchema = new Schema({
/* invoiceId: {
type: Number
},
*/
created: {
type: Date,
default: Date.now,
},
status: {
type: String,
enum: ['Paid', 'Unpaid']
},
net: {
type: Number
},
vat: {
type: Number
},
total: {
type: Number
},
products: [{
product: {
type: String,
default: '',
trim: true
},
description: {
type: String,
default: '',
trim: true
},
quantity: {
type: Number
},
unitCost: {
type: Number
},
vat: {
type: Number
},
total: {
type: Number
}
}],
billingDetails: [BillingDetails],
user: {
type: Schema.ObjectId,
ref: 'User',
required: true
}
});
答案 0 :(得分:4)
有一个名为mongoose-auto-increment的插件(我还没有使用过)可以处理自动增量。
如果您想针对这种特定情况自行编码,可以按照MongoDb tutorial进行编写,这似乎非常简单。
应该是这样的:
var InvoiceSchema = new Schema({..})
InvoiceSchema.pre('save', function (done) {
if (this.isNew){ //new Record => create
//this function is the one that should do the FindAndModify stuff
getNewId(function(autoincremented_id){
this.id=autoincremented_id;
done()
})
}else{
done()
}
});
对于领先的0,我建议使用虚拟。让我们假设你想要7个数字:
InvoiceSchema.virtual('formattedId').get(function () {
return ("0000000"+this.id).slice(-7);
});
InvoiceSchema.virtual('formattedId').set(function (arg_id) {
this.id = parseInt(arg_id);
});
答案 1 :(得分:0)
据我所知,mongo不支持自动增量。但你可以做小动作。 当您插入项目时,您使用FgtndAndModify查询并将新ID存储在其他集合中。例子是posted on mongodb blog