问题描述
我们希望在 Mongo Db 文档/“表”中有一个整数自动增量字段,可能与自动生成的唯一 _id 索引不同。
目的是为用户提供一个唯一的可读编号,自动递增,用作与我们正在使用的数据库表相关联的逻辑实体的参考。例如,用户将参考该编号来识别与该实体相关联的打印文档。
预期的行为是让该数字在数据库表本身内自动递增,就像在不同类型的数据库中发生的一样。
我们已经使用组合实现了我们的项目:Vue JS - Node - Mongo db。目的是避免使用一些 JS“技巧”来物理递增数字,而直接在文档模型中完成此操作。
我们在官方文档中找不到类似的内容,有人可以帮助我们吗? 非常感谢。
解决方法
MongoDB 没有自动增量功能(内置)。 需要编写额外的逻辑来做到这一点。
您可以通过在名为“user_sequence”的单独集合中跟踪“id”并在 MongoDB 中存储自定义函数以获取下一个值来解决此问题。
看看:https://docs.mongodb.com/manual/tutorial/store-javascript-function-on-server/
创建一个查询,如:
db.users.insert({
userid: sequenceNextValue("userid")
})
MongoDB 的分步教程:https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/
参考:- mongodb second id field with auto increment
方式 - 2
如果你喜欢使用 Mongoose(节点库)。 以下代码将帮助您
var CounterSchema = Schema({
_id: {type: String,required: true},seq: { type: Number,default: 0 }
});
var counter = mongoose.model('counter',CounterSchema);
var entitySchema = mongoose.Schema({
testvalue: {type: String}
});
entitySchema.pre('save',function(next) {
var doc = this;
counter.findByIdAndUpdate({_id: 'entityId'},{$inc: { seq: 1} },function(error,counter) {
if(error)
return next(error);
doc.testvalue = counter.seq;
next();
});
});