gpt4 book ai didi

javascript - Mongodb保存到嵌套对象中?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:30 25 4
gpt4 key购买 nike

我无法将我的 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"
}
]
}
]

我不知道如何插入/保存 POST req.body ,类似于

{
"player_name":"Derrick"
}

这样新的 req.body 现在已添加到 players 对象数组中。

我的问题是如何设置 mongodb/mongoose 查询来处理这个问题?

P.S 我显然收到了错误消息,因为我认为查询无效,但这只是我想要做的事情的一个想法。

这样的东西更合适,仍然不起作用,但我想它是一个更好的例子

var newPlayer = new models.Team({ _id: req.params.tid }, {players: req.body });

最佳答案

如果您在 Mongoose 中创建了团队模型,那么您可以调用内置方法 findOneAndUpdate:

Team.findOneAndUpdate({ _id: req.params.tid }, 
{ $addToSet: { players: req.body} },
function(err, doc){
console.log(doc);
});

您可以执行findOneupdate,然后save,但上面的方法更简单。仅当数组中尚不存在相关的特定更新时,$addToSet 才会添加。您还可以使用$push

上述内容在一定程度上取决于您如何配置模型以及您是否确实使用 Mongoose(但显然您问如何在 Mongoose 中完成它,所以我提供了一个可能的解决方案)。

$addToSet 的文档位于 http://docs.mongodb.org/manual/reference/operator/update/addToSet/相关操作如下:

db.collection.update( <query>, { $addToSet: { <field>: <value> } } );

关于javascript - Mongodb保存到嵌套对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23479419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com