2014-12-11 4 views
1

У меня проблема: если я попытаюсь сохранить новое свойство ref в существующий документ, я получаю ошибку castId, однако это же обновление отлично работает, если я изначально создал этот документ с этим набор свойств документа.Операция обновления Mongoose ObjectId Ошибка трансляции при новой ссылке

Позвольте мне объяснить немного больше:

У меня есть схема, как так:

name: String, 
desc: String, 
user: { 
    type: ObjectId, 
ref: 'User' 
} 

Теперь, если я создаю новый документ с «пользователя» установленного значения, я могу свободно обновлять что. Однако, если я создаю документ без значения «пользователь», а позже попробовать обновить его со значением пользователя я получаю

«Транслировать на ObjectId Сбой значения„[объект Object]“»

данные I отправка обратно в мою функцию одинакова в обоих случаях, это объект JSON, который имеет поле «_id».

Когда я впервые создаю его, все, что я делаю, сам задает значение «user» для значения objectID, но после этого я могу отправить объект JSON с помощью _id, и он отлично работает для обновлений (если значение уже было установлено на создание).

Я что-то не так? Есть лучший способ сделать это? Мой код обновления довольно прост:

myModel = _.extend(myModel, req.body); 
myModel.save() 

Мой создать код, когда я первый добавить документ также просто:

var model = new Model(req.body); 
model.save() 

Я могу это исправить, установив req.body.user к «_id 'перед запуском операции _.extend только тогда, когда он еще не существует. Он не идеален и чувствует себя немного взломанным, но я думаю, он работает.

Однако это становится еще более неприятным, если у меня такая же ошибка при работе с массивом внедренных объектов, который содержит ссылку ... Теперь, конечно, вместо проверки на каждую операцию обновления есть новый элемент массива, конвертировать все свойства «Ref» в ObjectId вручную ....

Не удается mongoose автоматически определить поле «_id», захватить его и сохранить в качестве ссылки? Почему это отлично работает, когда это поле было первоначально установлено при создании документа?

Так что если он был установлен на создание, то даже если отправить весь объект JSON, это происходит только тогда, когда я пытаюсь добавить новое поле или новую запись массива (содержащую объект с ref), чтобы получить эту ошибку ,

Чтобы показать, что я имею в виду с помощью встроенного дока массива с рефами:

{ 
myProp: String, 
myDetails: [{ 
    name: String, 
    myUser: { 
    type: ObjectId, 
    ref: 'User' 
    } 
}] 

Я надеюсь, что смысл здесь? Если нет, сообщите мне, если что-то смущает.

+0

Вы решили эту проблему? У меня что-то очень похожее. –

+0

Я сделал, я отвечу. –

ответ

0

Основная причина, по которой это происходит, - ожидание типа «ObjectId». Обычно этого не происходит, если вы создаете новую модель Mongoose и назначаете ее в поле «ref», чем mongoose достаточно умна, чтобы распознать ее и просто извлечь из нее «ObjectId».

Так два способа:

1) Сделайте это самостоятельно:

MyModel.refField = mongoose.Types.ObjectId (туЗЬптд)

2) Получить модель и назначить его:

var myModel = MyModel.findById (myString); MyModel.refFeild = myModel;

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