Несколько подобных вопросов задавались ранее, но я не смог заставить ни одно из решений работать для этого варианта использования.
Я пытаюсь написать ловушку предварительной фиксации, которая генерирует автоИдентификационный номер приращения каждый раз при сохранении нового документа «записи».
Создание идентификатора автоинкремента работает.Я смог убедиться в этом, проверив файл console.log.
Проблема заключается в том, что RecordID не устанавливается в сохраненном документе.Документ сохраняется с правильными значениями, установленными в вызове save (), но не с RecordID, установленным в хуке предварительного сохранения.
Модель записей
async function getNextSequence(name) {
let seq, result;
try {
result = await counters.findOneAndUpdate({
_id: name
}, {
// Increment sequence by 1
$inc: { seq: 1 }
});
}
catch (error) {
console.error(`getNextSequence failed ${error}`);
}
return result.seq;
}
// Pre save hook
RecordsSchema.pre('save', (next) => {
// Get document being saved
let record = this;
// Get next RecordID auto increment number
getNextSequence('RecordID').then(nextID => {
// Set RecordID
if (nextID) {
record.RecordID = nextID;
}
// nextID is showing up correctly
// record object also shows up correctly in the log,
// but it does NOT show up in the database
console.log(`RecordsSchema.pre ${nextID} ${JSON.stringify(record)}`);
next();
}).catch((error) => {
console.error(`getNextSequence failed ${error}`);
});
});
Запись вызова () вызов
router.post('/', (req, res, next) => {
let record = new records();
record.Title = req.body.Title;
record.Location = req.body.Location;
record.save().then(record => {
res.status(200).json(record);
}).catch((error) => {
console.log(`${origin} ${error}`);
res.status(500).send('Server error');
});
});
Результат
Название и местоположение записи сохраняются правильно.Тем не менее, RecordID не сохраняется.Я также попытался с крюком сохранения сообщения, и та же самая проблема происходит.
RecordsSchema.post('save', (doc) => {
// Get document being saved
let record = doc;
// Get next RecordID auto increment number
getNextSequence('RecordID').then(nextID => {
// Set RecordID
if (nextID) {
record.set( { RecordID: nextID } );
}
console.log(`RecordsSchema.post ${nextID} ${JSON.stringify(record)}`);
//next();
}).catch((error) => {
console.error(`getNextSequence failed ${error}`);
});
});