2015-02-24 5 views
0

Внутри 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 и возврат к действительному значению. Таким образом, это сводится к комбинации населения +, используя данные запроса для выполнения обновления.

ответ

0

Я думаю, что это потому, что undefined не выполняет проверку схемы Schema.Types.ObjectId. Вы должны использовать $ снята с охраны, как в

Employee.update({ 
    //whatever query 
}, 
{ 
    $unset: { supervisor: true } 
}, 
{ multi: true}) 
+0

Согласно [ссылка] (http://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose), undefined + save эквивалентно обновлению + unset. Разве это не так? –

 Смежные вопросы

  • Нет связанных вопросов^_^