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

Javascript 为什么将Mongo Id推送到数组而不是对象?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我正在使用Node.js创建我的第一个后端项目。我正在用Express 4和Mongoose构建一个股票交易应用程序。用户有一个股票对象列表{symbol:amount}。当用户想要购买股票时,他们会发送一个POST请求,其中包含股票、金额以及本例中的动词“buy”。在岗位上,, 我从请求主体获取库存和金额,并将其添加到用户的库存列表中,还将数据添加到操作列表中。我用{stock:'F',amount:'2',动词:'buy'}发布了一个请求,因此生成的股票列表应该是股票:[{F':'2'}]和

我正在使用Node.js创建我的第一个后端项目。我正在用Express 4和Mongoose构建一个股票交易应用程序。用户有一个股票对象列表
{symbol:amount}
。当用户想要购买股票时,他们会发送一个POST请求,其中包含股票、金额以及本例中的动词“buy”。在岗位上,, 我从请求主体获取库存和金额,并将其添加到用户的库存列表中,还将数据添加到操作列表中。我用
{stock:'F',amount:'2',动词:'buy'}
发布了一个请求,因此生成的股票列表应该是
股票:[{F':'2'}]

actions: [{"time": "2015-01-20T19:07:15.000Z",
            "verb": "buy",
            "amount": 2,
            "stock": "P",}]
当我执行
user.stocks.push(stockObject)时
user.stocks变为
[{u id:54be8739dd63f94c0e000004}]
而不是
[{'F':'2'}]
,操作列表变为 “行动”:[ { “时间”:“2015-01-20T19:07:15.000Z”, “动词”:“买”, “金额”:2, “股票”:“P”, _id:“54BEA763589E571F000004” }] 添加了一个_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 });                                      
        });

    });
})

mongoose
中引用另一个模型内的对象时,它只保留被引用对象的
id


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

这是否意味着每当我要访问需要使用user.findOne({id:user\u id}).populate('stocks').exec(err,user)的用户的库存列表时,它都是一个选项。但是您也可以在
用户
模式中定义一个
静态
方法,比如说
findById
,在这里您可以使用
填充
选项调用
findOne
。然后,每次调用该方法时,都会填充嵌套对象列表。