2016-10-08 24 views
0

我有股票對象的數組,並嘗試將ň報表對象到每個股票對象:動態添加對象的屬性不可用

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) 
     }) 
    }) 
}) 

我得到的是股票的對象列表沒有的報告...我想要的是相同的股票,但設置了附加屬性reports

最有趣的是事實,console.log(stock)前後分配stock.reports = reports後是一樣的,但console.log(stock.reports)提供報告的實際對象數組...

回答

0

盲拍:有時「點號」,如果失敗屬性不存在。你可以嘗試:的

stock['reports'] = reports 

代替

stock.reports = reports 
+0

我認爲這個詞「有時」有無關的編程.. – Rayon

+0

可能是真實的(你有它錯字!)。但事實是,「有時」發生,我從來沒有看到清楚的條件清單。所以對我來說,它是唯一一種「虛假」或「隨機」的方式。如果這在語義上不正確,請原諒我。英語不是我的母語 – mtsdev

+0

[___JavaScript屬性訪問:點符號與括號?___](http://stackoverflow.com/questions/4968406/javascript-property-access-dot-notation-vs-brackets) – Rayon

1

我找到了解決方案this other Stackoverflow topic。該解決方案是以下幾點:

而且因爲貓鼬忽略不模式存在的領域...

由於報告對象沒有在我的股票模型,貓鼬忽略了它...該解決方案是將其添加到貓鼬:

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

或者你可以'Stock.find().lean().exec(function(err,stocks){})' –