給出模式創建獨特的自動遞增領域:與貓鼬
var EventSchema = new Schema({
id: {
// ...
},
name: {
type: String
},
});
我要讓id
獨特的自動遞增。我試圖實現mongodb implementation,但有理解如何正確使用貓鼬的問題。
我的問題是:在沒有使用任何插件等情況下,在貓鼬中實現自動增量字段的正確方法是什麼?
給出模式創建獨特的自動遞增領域:與貓鼬
var EventSchema = new Schema({
id: {
// ...
},
name: {
type: String
},
});
我要讓id
獨特的自動遞增。我試圖實現mongodb implementation,但有理解如何正確使用貓鼬的問題。
我的問題是:在沒有使用任何插件等情況下,在貓鼬中實現自動增量字段的正確方法是什麼?
下面是使用貓鼬自動遞增場執行的一個很好的例子:
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 documentation執行步驟1。
是的,這是該功能的「瘦」。
您需要在您的mongo數據庫中擁有該集合。如果你願意,它可以作爲併發密鑰分配單個真值記錄。 Mongo的示例向您展示瞭如何執行「原子」操作來獲取下一個密鑰,並確保即使有併發請求,您也可以保證返回的唯一密鑰不會發生衝突。
但是,mongodb本身並沒有實現這個機制,它們告訴你如何去做。它們只提供_id作爲唯一的文檔密鑰。我希望這能澄清你的方法。
爲了擴展這個想法,繼續將mongo建議的實現添加到您定義的Mongoose模型中,並且您已經猜到了,在Pre-save或更好的pre-init事件中使用它,以確保您始終生成一個id if在將其保存到mongo之前,您需要使用收集服務器端。
我真的花了很多時間,並嘗試自己做。對不起,這樣一個虛擬的問題 –
我試圖增加ID預保存。但我如何處理櫃檯收集?我必須有架構嗎?這是我不知道的問題 –