有没有办法在 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/

参考:- 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();
    });
});