用mongoose创build独特的自动增量场

给定一个Schema:

var EventSchema = new Schema({ id: { // ... }, name: { type: String }, }); 

我想使id独特和自动增量。 我试图实现MongoDB的实现,但有理解如何在mongoose正确的问题。

我的问题是 :在没有使用任何插件的情况下,在mongoose中实现自动增加字段的正确方法什么?

下面是使用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(); }); }); 

您应该首先从mongodb文档执行第一步。

是的,这是该function的“瘦”。

你需要在你的mongo数据库中有这个集合。 如果你愿意的话,它可以作为并发密钥分配的单一真实logging。 Mongo的例子告诉你如何执行“primefaces”操作来获得下一个密钥,并确保即使有并发请求,你也将保证返回唯一的密钥而不会发生冲突。

但是,mongodb本身并没有实现这个机制,他们告诉你如何去做。 他们只提供了_id作为唯一的文件密钥。 我希望这可以澄清你的方法。

为了扩展这个想法,继续向已定义的Mongoose模型中添加mongobuild议的实现,并且如你所猜测的那样,在Pre-save或更好的pre-init事件中使用它,以确保你总是生成一个id收集服务器端,然后将其保存到mongo。