Javascript 为什么将Mongo Id推送到数组而不是对象?
我正在使用Node.js创建我的第一个后端项目。我正在用Express 4和Mongoose构建一个股票交易应用程序。用户有一个股票对象列表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'}]和
{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
。然后,每次调用该方法时,都会填充嵌套对象列表。