0
Я пытаюсь сохранить модель, которая имеет отношение к другому:Невозможно сохранить мангуст модель со ссылкой на другой объект
exports.portfolioSchema = new Schema({
name: {type: String, required: true, unique: true},
isActive: {type: Boolean, default: true}
});
exports.projectSchema = new Schema({
name: {type: String, required: true, unique: true},
isActive: {type: Boolean, required: true, default: true},
portfolio: {type: mongoose.Schema.Types.ObjectId, ref: 'portfolioSchema', required: true},
isCodeBaseFullyOwned: {type: Boolean, required: true, default: false}
});
При попытке сохранить его:
Project = store.model('Project', schema.projectSchema);
var p = new Project();
p.name = project;
Portfolio.findOne({"name":activePortoflios[0]}, '_id', function (err, data) {
p.portfolio = data._id;
});
p.isActive = true;
p.save(function (err) {
if (err) console.log(err);
});
Я получаю следующую ошибку:
{ ValidationError: Project validation failed
at MongooseError.ValidationError (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/error/validation.js:23:11)
at model.Document.invalidate (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/document.js:1524:32)
at /Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/document.js:1399:17
at validate (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:706:7)
at /Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:743:9
at Array.forEach (native)
at ObjectId.SchemaType.doValidate (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:711:19)
at /Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/document.js:1397:9
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
errors:
{ portfolio:
{ ValidatorError: Path `portfolio` is required.
at MongooseError.ValidatorError (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/error/validator.js:24:11)
at validate (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:705:13)
at /Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:743:9
at Array.forEach (native)
at ObjectId.SchemaType.doValidate (/Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/schematype.js:711:19)
at /Users/sasha/PycharmProjects/P5N/node_modules/mongoose/lib/document.js:1397:9
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
message: 'Path `portfolio` is required.',
name: 'ValidatorError',
properties: [Object],
kind: 'required',
path: 'portfolio',
value: undefined } },
message: 'Project validation failed',
name: 'ValidationError' }
Есть что-то, что мне не хватает? data._id
дает тип ObjectId, мне нужно установить что-нибудь еще?
Есть ли способ делать вещи синхронно без обратных вызовов? – abolotnov
NodeJs был разработан для работы с обратными вызовами. Что заставляет вас беспокоиться? Вы можете использовать [обещания] (http://mongoosejs.com/docs/promises.html), если вы предпочитаете синтаксис. Использование синхронной функции приведет к зависанию вашего процесса. –