我们希望在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/
REF:带有自动递增的mongodb第二个id字段
方式-2
如果您喜欢使用Mongoose(node-lib(。以下代码将帮助您
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();
});
});
在我的案例中,$inc不起作用,因为我在$set
中使用了$inc
:(
例如
await userSchema.updateOne({ _id: mongoose.Types.ObjectId(req.userId) }, { $set: { $inc: { myBalance: -claimAmount } } });
而不是
await userSchema.updateOne({ _id: mongoose.Types.ObjectId(req.userId) }, { $inc: { myBalance: -claimAmount }});