У меня есть коллекция с уникальным полем (field)
При сохранении записи вылетает ошибка 11000, тут все хорошо, но можно ли как то изменить эту ошибку к примеру в схеме mongoose, чтобы по мимо ошибки указывался ID дубликата? Мне нужно сделать в случае совпадения, изменить/расширить запись, и приходится искать дубликат либо до сохранения, либо после попытки сохранить, это не удобно...
Сейчас делаю проверку перед сохранением что то вроде того
function saveCollect(request) {
return Collect.findOne({field: "слово"}).then(e => {
return null === e
? new Collect({field: "слово"}).save()
: errorDuplicate(e)
})
}
function errorDuplicate(request) {
return throw Error(`<a href="/fields/${request._id}/">дубликат</a>`) // вывожу ссылку чтобы изменить/дополнить документ
}
Хочется сделать чтобы при сохранении можно было отловить ID документа без костылей выше
exports.post = (request, response, next) => {
const makeRequest = async () => {
await saveCollect(request.body.field)
return response.end()
}
return makeRequest()
.catch(e => {
// При коде 11000 хотелось бы видеть ID документа, быть может это можно настроить в схеме монгуса?!
return errors(403, e.message)
})
}
function saveCollect(request) {
return Collect({field: request}).save()
}
Вообще не понимаю почему этого не сделано по дефолту, монго выплевывет ошибку дубликата, но при этом сообщение никакой смысловой нагрузки в себе не несет, что за дубль, какой дубль, какой документ идентичен, вот и приходится делать 2 запроса вместо одного.