2015-03-25 5 views
0

Использование мангуста Заполнить: http://mongoosejs.com/docs/populate.htmlЗачем нужно заполнять Мангуста?

Это швы, что мангуст вынуждает меня объявить значение реф для заселить, когда я сначала создать документ, но в моем случае я не реф информации пока нет. Когда я пытаюсь создать новый документ, обеспечивая при этом пустой строке я получаю в моем поле разработчиков я получаю:

{"message":"Cast to ObjectId failed for value \"\" at path \"developer\"","name":"CastError","type":"ObjectId","value":"","path":"developer"} 

объекта, который я спасительный через мангуст:

var Project = { 
    name: 'Coolproject', 
    status: 'pending', 
    developer: '', 
    type: 'basic', 
}; 

Project.create(req.body, function(err, project) { 
    if(err) { return handleError(res, err); } 
    return 
}); 

My Model:

var ProjectSchema = new Schema({ 
    name: String, 
    status: {type:String, default:'pending'}, 
    developer:{type: Schema.Types.ObjectId, ref: 'User'}, 
    type:String 
}); 

В принципе, мне нужно установить его позже, но это не шов, как это возможно. В настоящее время моя работа заполняет его фиктивным пользователем до поздней, но это меньше, чем желательно.

Мысли?

Update

Понял, что если я предоставить идентификатор объекта, как значение (55132a418b3cde5546b01b37) это позволяет мне сохранить документ. Очень странно. Угадайте, что он просто решил, что документ может двигаться дальше. Подумайте, почему это не происходит для пустого значения.

+0

Я не понимаю, что вы имеете в виду. Не позволяет ли вы создать документ, не определяя пользователя для разработчика? или это не позволяет вам определить схему без существующей модели пользователя. Как заселяют связь с этим? вопрос выглядит очень X/Y ish. –

+0

Ahhh, да, очень верно. Обновлено, надеюсь, будет немного более ясно. Я хочу, чтобы сохранить ссылку позже, а не когда я изначально создал родительский документ. – Justin

+0

Произошла ли эта ошибка при создании нового документа? вы сказали сохранить, но если вы сохранили это, это означало бы, что вы, по крайней мере, смогли в какой-то момент создать документ. Можете ли вы включить код, вызывающий эту ошибку? –

ответ

-1

Вам нужно использовать разреженный индекс в модели. Таким образом, действительная модель может иметь developer равна нулю

var ProjectSchema = new Schema({ 
    name: String, 
    status: {type:String, default:'pending'}, 
    developer:{type: Schema.Types.ObjectId, ref: 'User', sparse:true}, 
    type:String 
}); 

См http://mongoosejs.com/docs/api.html#schematype_SchemaType-sparse и http://docs.mongodb.org/manual/core/index-sparse/ для получения дополнительной информации

+0

Документ, определенный в вопросе, должен иметь возможность иметь неопределенного разработчика без создания разреженного индекса. – numbers1311407

+0

Хм ... Пробовал это и не шёл на работу. :/ – Justin

+0

downvoted: проблема не связана с индексами. –

1

Проблема объясняется в сообщении об ошибке. Вы не можете сохранить Пустую строку вместо ObjectId. Поле не указано как 'required', поэтому нет проблем с его сохранением и сохранением документа.

коррекция Код:

// you can save this 
var Project = { 
    name: 'Coolproject', 
    status: 'pending', 
    type: 'basic', 
}; 
Смежные вопросы