2016-08-08 11 views
2

ネストされたサブ文書tertiaryに詳細を保存しようとしました。Node.jsとmongooseを使用してネストされたサブ文書を更新する

module.exports = mongoose.model('Todo', { 
    title : String, 
    image:String, 
    bgimage:String, 
    secondary:[Secondary] 
}); 

var Secondary = new mongoose.Schema({ 
    title : String, 
    image:String, 
    bgimage:String, 
    tertiary :[Tertiary] 
}); 

var Tertiary = new mongoose.Schema({ 
    title : String, 
    description:String, 
    image:String 
}); 

私のtertiaryデータを保存するためのコードは次のとおりです。私はプライマリオブジェクトIDとセカンダリオブジェクトIDを持っています。

Todo.findById(fields.primaryid, function (err, secondary_todo) { 
    if (!err) { 
     console.log("---Inside not errot----"); 
     console.log(fields.secondaryRefid); 

     secondary_todo.secondary.findById(fields.secondaryRefid, 
              function (err, tertiary_todo) { 
      console.log("---In Secondary data----"); 
      console.log(tertiary_todo); 
      if (!err) { 
       tertiary_todo.tertiary.push({ 
        _id: mongoose.Types.ObjectId(), 
        title : fields.title, 
        image : fields.file, 
        description : fields.description, 
       }); 
      } 
      tertiary_todo.save(); 
     }); 
    } 
}); 

私は私のターミナルに入ったエラーは、誰もが簡単な修正を与えることができます

/......./.../..../lib/utils.js:419 
    throw err; 
     ^
    TypeError: Object [object Object],[object Object],[object Object] has no method 'findById' 
at Promise.<anonymous> 

です。私はそれを試して打ちました。

答えて

2

サブドキュメントを説明するドキュメントのthisページを読むことができます。また、サブドキュメントのidを指定する特別なid()メソッドもあります。
ので、代わりのサブ文書にfindByIdを呼び出す

secondary_todo.secondary.findById(fields.secondaryRefid, function (err, tertiary_todo) { ... 

使用id

ので

var tertiary_todo = secondary_todo.secondary.id(fields.secondaryRefid); 
... 
のようなアップデート:もう一つの問題は、彼らが前にあなたの子供のスキーマを使用してスキーマの設定が壊れているということはおそらくあり定義された。そのように並べ替えます。

var Tertiary = new mongoose.Schema({ 
    title : String, 
    description:String, 
    image:String 
}); 

var Secondary = new mongoose.Schema({ 
    title : String, 
    image:String, 
    bgimage:String, 
    tertiary :[Tertiary] 
}); 

module.exports = mongoose.model('Todo', { 
    title : String, 
    image:String, 
    bgimage:String, 
    secondary:[Secondary] 
}); 
+0

こんにちは。 DAXaholic。私はあなたが提案したコードのために次のエラーを受け取りました。 /../../node_modules/mongoose/lib/utils.js:419 throw err; ^ TypeError:Object [オブジェクトオブジェクト]、[オブジェクトオブジェクト]、[オブジェクトオブジェクト]にはメソッド 'id'がありません – venkat

+0

コードにスキーマを設定する別の可能性のある問題が見つかりました - 更新を見て、もう一度試してください – DAXaholic

+0

Nowそれは動作します(つまり、エラーはありません)しかし、私は第三次細部を保存することはできません。以下のように私のコードを置き換えてください。 Types.ObjectId()、 \t \tタイトル:fields.title、 image:fields.file、 description:fields.description、 }); \t \t tertiary_todo.save(); – venkat

関連する問題