2017-02-11 2 views
0

私は別のものへの関係を持っているモデルを保存しようとしていますを参照してマングースモデルを保存できません次のエラーが表示されます。は別のオブジェクト

{ 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型を生成しますが、何も設定する必要はありませんか?

答えて

0

findOneは、非同期呼び出しです。したがって、保存しようとすると、findOneコールバックが返されませんでした。プロパティportfolioが必要なので、検証に合格しませんでした。

Project = store.model('Project', schema.projectSchema); 
var p = new Project(); 
p.name = project; 

Portfolio.findOne({ name: activePortoflios[0] }, '_id', function (err, data) { 
    if (err) return handleError(err); 
    p.portfolio = data._id; 
    p.isActive = true; 
    p.save(function (err) { 
     if (err) console.log(err); 
    }); 
}); 
+0

コールバックなしで同期させる方法はありますか? – abolotnov

+0

NodeJsはコールバックで動作するように設計されています。何が気になる?構文を好むなら、[promises](http://mongoosejs.com/docs/promises.html)を使うことができます。同期関数を使用すると、プロセスが停止します。 –

関連する問題