有没有一种方法可以让Mongo-Db中的整数自动递增字段作为不同于标准id的文档/表的一部分



我们希望在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 }});

相关内容

  • 没有找到相关文章

最新更新