может ли кто-нибудь сказать мне, как я могу создать поле автоинкремента в мангусте без использования какой-либо библиотеки или плагина. Любой простой и легкий способ..
как я могу создать поле автоинкремента в мангусте
Ответы (2)
существует очень простой и легкий способ реализовать автоматическое увеличение в мангусте с помощью функции предварительного сохранения мангуста. Вот мои коды для сбора пользователей, попробуйте тот же трюк в своей модели (схеме) мангуста, чтобы реализовать автоматическое увеличение. Вставьте этот код в файл схемы коллекции и замените некоторые переменные(userSchema, user) в соответствии со схемой вашей коллекции.
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: Перед вставкой новой записи выберите последний документ (строку) и поставьте id = 1 + (id of the last record)
. 2: Вы можете использовать плагин mongoose-auto-increment а>. 3: Последний, но не менее важный вариант: сохранить последнее увеличенное значение в отдельной коллекции (имя коллекции: autoIncrement
столбца будут коллекцией, а sno), перед созданием записи выбрать значение sno этой коллекции, увеличить его, создайте свою запись и снова обновите значение sno в коллекции autoIncrement.
Бонус:
1: Вы можете создать автоинкремент в Redis.
2: первый пункт этого ответа не сможет решить несколько проблем, например: ваше приложение будет вести себя при удалении, если пользователь удалит строку из начала или середины вашей коллекции, он удалит этот идентификатор (это sno. form table), но на случай, если пользователь удалит последнюю запись. Это поставит то сно. в следующей записи.
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();
});
});