Я использовал MySql DB для своего веб-сайта и теперь обновляю его до MongoDB. В некоторых таблицах были столбцы, которые автоматически увеличивались, и я хочу убедиться, что это продолжается. Ниже приведены мои выводы, но ни один из них не работает. Использование подключаемого модуля mongoose-auto-increment
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
autoIncrement = require('mongoose-auto-increment');
var connection = mongoose.createConnection("mongodb://localhost/myDatabase");
autoIncrement.initialize(connection);
EmborderSchema.plugin(autoIncrement.plugin, {
model: 'Emborder',
field: 'emborder_id',
startAt: 28855,
increamentBy: 1
});
Использование хука предварительного сохранения:
EmborderSchema.pre('save', function (next) {
if (this.emborder_id == undefined) {
Emborder.findOne({})
.sort({emborder_id: -1})
.exec(function (err, data) {
this.emborder_id = data.emborder_id + 1;
next();
})
} else {
next();
}
});
Использование первого метода дает мне ошибку
E11000 Коллекция ошибок дублированного ключа: 24hd.24hd_emborder index: emborder_id_1 dup key: {23345}
Второй метод дает эту ошибку
E11000 Коллекция ошибок дублированного ключа: 24hd.24hd_emborder index: emborder_id_1 dup key: {: null}
Примечание. Emborder_id был первичным ключом в моей старой базе данных Mysql, и в этом коде значение emborder_id не определено, поскольку я добавляю новую запись.
Пожалуйста, помогите мне найти, что не так в этом подходе.
data
напечатать во втором подходе, внутри блокаexec
. - person Himanshu sharma   schedule 14.01.2018Emborder.findOne({})
имеет свою собственную область действия, а ссылка наthis
внутри приводит к областиEmborder
. Итак, если мы возьмемthis
в переменнойself
. Работает нормально. - person Himanshu sharma   schedule 14.01.2018