为什么将Mongo Id推送到数组而不是对象?

时间:2015-01-20 17:22:29

标签: javascript node.js mongodb express mongoose

我正在使用Node.js创建我的第一个后端项目。我正在使用Express 4和Mongoose构建股票交易应用程序。用户有一个股票对象列表{symbol: amount}。当用户想要购买股票时,他们会发送带有股票,金额和动词的POST请求,在这种情况下“购买”。在文中, 我从请求正文中获取库存和金额,并将其添加到用户的库存清单中,并将数据添加到操作列表中。我使用{stock: 'F', amount: '2', verb: 'buy'}发布请求,因此生成的库存清单应为stocks:[{'F': '2'}]

actions: [{"time": "2015-01-20T19:07:15.000Z",
            "verb": "buy",
            "amount": 2,
            "stock": "P",}]

当我执行user.stocks.push(stockObject);时,user.stocks变为[{ _id: 54be8739dd63f94c0e000004 }]而不是[{'F': '2'}],并且操作列表变为     "行动":[             {                 "时间":" 2015-01-20T19:07:15.000Z",                 "动词":"购买",                 "金额":2,                 " stock":" P",                 " _id":" 54bea763589e571f0f000004"             }] 添加了_id。 当动作列表获取具有id的完整对象时,为什么股票列表仅获取具有id的对象?

var UserSchema   = new Schema({
    id: String,        
    stocks: [{
        symbol: String,
        amount: Number
    }]
});

router.route('/user/:user_id/action')
.post(function(req, res) {
    User.findOne({           
        id: req.params.user_id
    }, function(err, user) {
        if (err) res.send(err);
        var stock = req.body.stock;
        var amount = req.body.amount;
        var stockObject = {};
        if(req.body.verb === 'buy') {
            stockObject[stock] = amount;
        } 
        var action = {
            time: Date(),
            verb: req.body.verb,
            amount: req.body.amount,
            stock: req.body.stock
        }
        user.stocks.push(stockObject);
        user.actions.push(action);                                  
        user.save(function(err) {                                   
            if (err)
                res.send(err);
            res.json({ actions: user.actions, stocks: user.stocks });                                      
        });

    });
})

1 个答案:

答案 0 :(得分:0)

当您在mongoose中引用另一个模型中的对象时,它只保留引用对象的id

如果要检索引用的对象属性,则必须使用populate method