猫鼬自动增量

根据这个MongoDB文章可以自动增加一个字段,我希望使用计数器收集方式。

这个例子的问题是,我没有成千上万的人使用mongo控制台在数据库中输入数据。 相反,我正在尝试使用猫鼬。

所以我的模式看起来像这样:

var entitySchema = mongoose.Schema({
  testvalue:{type:String,default:function getNextSequence() {
        console.log('what is this:',mongoose);//this is mongoose
        var ret = db.counters.findAndModify({
                 query: { _id:'entityId' },
                 update: { $inc: { seq: 1 } },
                 new: true
               }
        );
        return ret.seq;
      }
    }
});

我在同一个数据库中创建了计数器集合,并添加了一个包含'entityId'的_id的页面。 从这里我不知道如何使用猫鼬更新该页面,并获得递增的数字。

没有计数器模式,我希望它保持这种方式,因为这不是真正的应用程序使用的实体。 它只能在模式中用于自动递增字段。


下面是一个例子,您可以如何在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();
    });
});

您可以使用mongoose-auto-increment软件包,如下所示:

var mongoose      = require('mongoose');
var autoIncrement = require('mongoose-auto-increment');

/* connect to your database here */

/* define your CounterSchema here */

autoIncrement.initialize(mongoose.connection);
CounterSchema.plugin(autoIncrement.plugin, 'Counter');
var Counter = mongoose.model('Counter', CounterSchema);

你只需要初始化一次autoIncrement


投票最多的答案不起作用。 这是修复:

var CounterSchema = new mongoose.Schema({
    _id: {type: String, required: true},
    seq: { type: Number, default: 0 }
});
var counter = mongoose.model('counter', CounterSchema);

var entitySchema = mongoose.Schema({
    sort: {type: String}
});

entitySchema.pre('save', function(next) {
    var doc = this;
    counter.findByIdAndUpdateAsync({_id: 'entityId'}, {$inc: { seq: 1} }, {new: true, upsert: true}).then(function(count) {
        console.log("...count: "+JSON.stringify(count));
        doc.sort = count.seq;
        next();
    })
    .catch(function(error) {
        console.error("counter error-> : "+error);
        throw error;
    });
});

选项参数为您提供更新的结果,如果它不存在,它将创建一个新文档。 你可以在这里查看官方文档。

如果你需要一个排序索引检查这个文档

链接地址: http://www.djcxy.com/p/60691.html

上一篇: Mongoose auto increment

下一篇: existing mogodb collection with mongoose