【问题标题】:Auto incrementing field in mongoose猫鼬中的自动递增字段
【发布时间】:2014-06-10 17:35:12
【问题描述】:

我正在尝试在 mongodb 中实现一个自动递增字段,如文档 (http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/) 中突出显示的那样。但是,我不确定在猫鼬中最好的方法是什么。

我有一个 CounterSchema 和一个 UserSchema,我想知道将 getNextSequence 函数放在哪里,以及如何从 User Schema 中调用它?

//counter.js
var CounterSchema = new Schema({
  category: String,
  seq: Number
});

//done in mongo shell
db.counters.insert({category: 'userIndex', seq: 0})

//user.js
var UserSchema = new Schema({
  name: String,
  UserIndex: Number
}

//per mongodb docs -> not sure where I should insert it
function getNextSequence(name) {
   var ret = db.counters.findAndModify(
          {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true
          }
   );

   return ret.seq;
}

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    尝试像这样预先保存异步中间件

    User.pre('save', true, function(next, done){
      var self = this;
      var Autoincrement = mongoose.model('Autoincrement');
      if (self.isNew){ 
        Autoincrement.getNext(function(err, val){
          if (err) return done(err);
          self.auto = val;
          done();
        });
      }else{
       // done should be called after next
       setTimeout(done,0);
      }
      next();
    });
    

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 2018-12-12
      • 2020-10-15
      • 2017-06-01
      • 2015-04-06
      • 2020-06-25
      相关资源
      最近更新 更多