Внутри MEAN.js приложения, у меня есть схема, которая имеет subdoc реф:Установка значения на неопределенный/нулевой поддокументе поле ObjectId производит Cast для ObjectId ошибки
var EmployeeSchema = new Schema({
supervisor: {
type: Schema.Types.ObjectId,
ref: 'User',
},
...
Я могу создавать модели из схемы с настройкой поля супервизора или без него. Если значение установлено при создании, то я могу сбросить его следующим образом:
employee.supervisor = undefined;
employee.save(function(err) {
...
Однако, если значение поля не определено уже, то я не могу установить любые значения, после этого - это производит следующее сообщение об ошибке:
CastError: Cast to ObjectId failed for value "[object Object]" at path "supervisor"
в самом деле, пытаясь установить значение не определено снова, с тем же кодом .save пути, вызовет ту же ошибку. Откуда эта ошибка? Что это за объект, на который он ссылается (когда я отправляю его неопределенное значение)?
Я относительно новичок в мангусте. Это похоже на фундаментальную проблему и, скорее всего, на ошибку пользователя. Если я не использую правильный шаблон, то, пожалуйста, дайте мне знать. Я использовал mongoose 3.8.8, и я перешел на 3.8.23, но безрезультатно.
EDIT: Что-то, что может иметь значение, заключается в том, что супервизор заполняется, когда работник возвращается клиенту. Кажется, что проблема связана с использованием контроллера WCAN Express для обновления, который выполняет _.значение измененного состояния на данные req.employee, которые были отправлены клиенту.
Если я снова вручную запрошу сотрудника и установил/отключил поле супервизора, тогда я могу получить ожидаемое поведение без ошибок. Это включает настройку в undefined и возврат к действительному значению. Таким образом, это сводится к комбинации населения +, используя данные запроса для выполнения обновления.
Согласно [ссылка] (http://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose), undefined + save эквивалентно обновлению + unset. Разве это не так? –