2016-08-08 16 views
2

Ich habe versucht, Details zu meinem verschachtelten Unterdokument tertiary zu speichern.Update geschachtelten Unterdokument mit Node.js und Mungo

Der Code zum Speichern meiner tertiary Daten ist unten. Ich habe meine primäre Objekt ID sowie sekundäre Objekt 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(); 
     }); 
    } 
}); 

Der Fehler, den ich in meinem Terminal bekam ist

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

Kann jemand eine schnelle Lösung geben. Ich habe es versucht und geschlagen.

Antwort

2

Vielleicht möchten Sie this Seite in den Dokumenten lesen, die Unterdokumente beschreiben, und auch die spezielle Methode id(), die verwendet wird, um ein Unterdokument zu finden, geben Sie seine ID ein.
Also statt

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

Verwendung id wie so

var tertiary_todo = secondary_todo.secondary.id(fields.secondaryRefid); 
... 

aktualisieren findById auf den Unterlagen Aufruf: Ein weiteres Problem ist wahrscheinlich, dass Ihr Schema-Setup, wie Sie Ihr Kind Schemata verwenden gebrochen wird, bevor sie sind definiert. Reorder sie so

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

Hallo. DAXaholisch. Ich habe den folgenden Fehler für den von Ihnen vorgeschlagenen Code erhalten. /../../node_modules/mongoose/lib/utils.js:419 werfen err; ^ TypeError: Objekt [Objekt Objekt], [Objekt Objekt], [Objekt Objekt] hat keine Methode 'ID' – venkat

+0

Ich fand ein anderes mögliches Problem in Ihrem Code, der das Schema erstellt - siehe das Update und versuchen Sie es erneut bitte – DAXaholic

+0

Jetzt es funktioniert (dh kein Fehler) Aber ich kann meine tertiären Details nicht speichern. Ich platziere meinen Code wie unten ist da irgendwas falsches oder sonst muss ich etwas ändern um zu speichern tertiary_todo.tertiary.push ({ \t \t _id: mongoose. Types.ObjectId(), \t \t title: fields.title, image: fields.file, Beschreibung: fields.description, }); \t \t tertiary_todo.save(); – venkat