我无法将req.body
插入我的mongodb集合中。
我有这个触发add
方法的路由,我试图弄清楚将req.body
保存到嵌套集合数组中的查询
router.post('/api/teams/:tid/players', player.add);
add: function(req, res) {
var newPlayer = new models.Team({ _id: req.params.tid }, req.body);
newPlayer.save(function(err, player) {
if (err) {
res.json({error: 'Error adding player.'});
} else {
console.log(req.body)
res.json(req.body);
}
});
}
这是一个示例文档
[
{
"team_name":"Bulls",
"_id":"5367bf0135635eb82d4ccf49",
"__v":0,
"players":[
{
"player_name":"Taj Gibson",
"_id":"5367bf0135635eb82d4ccf4b"
},
{
"player_name":"Kirk Hinrich",
"_id":"5367bf0135635eb82d4ccf4a"
}
]
}
]
我无法弄清楚如何插入/保存类似
的POSTreq.body
{
"player_name":"Derrick"
}
这样新的req.body
现在被添加到players
对象数组中。
我的问题是如何设置mongodb / mongoose查询来处理这个?
P.S 我显然收到错误消息,因为我认为查询无效,但这只是我想要做的事情。
这样的东西更合适,但仍然不起作用,但我猜是一个更好的例子
var newPlayer = new models.Team({ _id: req.params.tid }, { players: req.body });
答案 0 :(得分:1)
如果您在Mongoose中创建了一个团队模型,那么您可以调用内置方法findOneAndUpdate
:
Team.findOneAndUpdate({ _id: req.params.tid },
{ $addToSet: { players: req.body} },
function(err, doc){
console.log(doc);
});
您可以findOne
,update
,然后save
,但上述内容更直截了当。 $addToSet
只会在数组中尚未存在相关特定更新时添加。您也可以使用$push
。
以上确实在很大程度上取决于你如何配置你的模型,以及你确实使用的是Mongoose(但显然你问过如何在Mongoose中完成它,所以我已经提供了它作为一种可能的解决方案)。
$addToSet
的文件位于http://docs.mongodb.org/manual/reference/operator/update/addToSet/,相关操作如下:
db.collection.update( <query>, { $addToSet: { <field>: <value> } } );