2016-10-08 34 views
0

ich eine Reihe von Vektorobjekten und versuchen zu befestigen n Berichtsobjekte an jedem der Vektorobjekte:dynamisch hinzugefügt Objektattribute nicht verfügbar

router.get('/stocks', function (req, res, next) { 
    Stock.find({}, function (err, stocks) { 
     if (err) { 
      next(err) 
      return 
     } 

     async.map(stocks, function (stock, callback) { 
      Report.find({ 'isin': stock.isin }).sort('-created').limit(10).exec(function (err, reports) { 
       if (err) { 
        next(err) 
        return 
       } 

       stock.reports = reports 
       return callback(null, stock) 
      }) 
     }, function (err, stocks) { 
      if (err) { 
       next(err) 
       return 
      } 

      res.json(stocks) 
     }) 
    }) 
}) 

Was ich erhalte, ist die Liste der Aktienobjekte ohne der Berichte ... Was ich will ist stattdessen die gleichen Aktien, aber mit dem zusätzlichen Attribut reports gesetzt.

Besonders interessant ist die Tatsache, dass console.log(stock) vor und nach der Zuordnung stock.reports = reports gleich ist, aber console.log(stock.reports) liefert die aktuelle Palette von Berichtsobjekten ...

Antwort

0

Blind Shot: Manchmal ist das. „Punktnotation“ schlägt fehl, wenn Attribut existiert nicht. Sie könnten versuchen:

stock['reports'] = reports 

statt

stock.reports = reports 
+0

ich das Wort „Manchmal“ denken, hat nichts mit der Programmierung .. – Rayon

+0

Wahrscheinlich wahr zu tun (Sie Tippfehler drin haben!). Aber Tatsache ist, dass "manchmal" passiert und ich nie eine klare Liste von Bedingungen darüber gesehen habe. Also für mich ist es nur eine andere Art, "falsch" oder "zufällig" zu sagen. Und entschuldigen Sie, wenn das semantisch falsch ist. Englisch ist nicht meine Muttersprache – mtsdev

+0

[___JavaScript-Eigenschaft Zugriff: Punktnotation gegen Klammern? ___] (http://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets) – Rayon

1

ich die Lösung in this other Stackoverflow topic gefunden. Die Lösung war die folgende:

Und weil Mungo ignoriert Felder, die im Schema nicht vorhanden ist ...

Da die Berichte Objekt wurde in meinem Lager Modell nicht, Mungo es ignoriert ... Die Lösung war es zu Mungo hinzuzufügen:

const StockSchema = new mongoose.Schema({ 
    ... 
    reports: { 
     type: mongoose.Schema.Types.Mixed 
    }, 
    ... 
}) 
+0

Oder Sie können 'Stock.find(). Mager(). Exec (Funktion (err, Aktien) {})' –

Verwandte Themen