动态添加的对象属性不可用

时间:2016-10-08 19:47:34

标签: javascript node.js mongoose async.js

我有一个Stock对象数组,并尝试将n个Report对象附加到每个Stock对象:

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)提供了实际的报告对象数组......

2 个答案:

答案 0 :(得分:1)

我在this other Stackoverflow topic找到了解决方案。解决方案如下:

因为mongoose忽略了架构中不存在的字段......

因为报告对象不在我的库存模型中,所以mongoose忽略了它...解决方案是将它添加到mongoose:

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

答案 1 :(得分:0)

盲目拍摄:有时是"点。符号"如果属性不存在则失败。你可以尝试:

stock['reports'] = reports

而不是

stock.reports = reports