如何在mongoose中创建自动增量字段

时间:2017-01-17 06:42:02

标签: node.js mongoose mongoose-schema mongoose-auto-increment

任何人都可以告诉我如何在不使用任何库或插件的情况下在mongoose中创建自动增量字段。任何简单易行的方式..

2 个答案:

答案 0 :(得分:3)

通过使用 mongoose pre save 功能,可以非常简单地在猫鼬中实现自动增量。以下是我的用户收集代码,尝试使用 mongoose model(schema)中的相同技巧来实现自动增量。将此代码粘贴到您的集合架构文件中,并根据您的集合架构替换某些变量 userSchema,用户

userSchema.pre('save', function(next) {
    var currentDate = new Date();
    this.updated_at = currentDate;

    if (!this.created_at)
        this.created_at = currentDate;

    var sno = 1;
    var user = this;
    User.find({}, function(err, users) {
    if (err) throw err;
        sno = users.length + 1;
        user.sno = sno;
        next();
    });
});

答案 1 :(得分:0)

如果您使用软删除功能 以上答案可能有用,但是要解决此问题,有几种方法。 1:在插入新记录之前,获取最后一个文档(行)并放入id = 1 + (id of the last record)。 2:您可以使用插件 mongoose-auto-increment。 3:最后但并非最不重要选项,在创建记录之前,将最后递增的值保存在单独的集合中(集合名称:autoIncrement列将是collection和sno)。集合将其递增,创建记录并在autoIncrement集合中再次更新sno值。

奖金:

1:您可以在redis中创建autoIncrement。

2:此答案的第一点将无法解决几个问题,即:您的应用将在删除时执行某种行为,如果用户从集合的开头或中间删除一行,它将删除该id(表格表格),但如果用户删除了最后一条记录。它会放那鼻子。在下一条记录中。

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