我知道这个问题可能是初学者,但是我还没有找到任何东西。
我想用mongoose
更新对象数组。我有兴趣根据索引从users数组更新一个对象。
通常,一次更改一个用户。
这是我的模式:
_id: Schema.Types.ObjectId,
name: { type: String, required: true },
gm: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
users: [],
我要更新users数组中的对象,如下所示:
{
id:"5bcb7c7ff9c5c01b9482d244",
gm:"5bcb7c7ff9c5c01b9482d246",
name:"room 1"
users: [
{
id:"5bcb7c7ff9c5c01b9482d243",
stats:{
power:10,
mobility: 5,
vitality: 20
},
bag:{itemSlot1: "Knife",itemSlot2:"Sword" }
},
{
id:"5bcb7c7ff9c5c01b9482d241",
stats:{
power:10,
mobility: 5,
vitality: 20
},
bag:{itemSlot1: "Knife",itemSlot2:"Sword" }
]
}
我想执行一次patch
或post
请求,以每次从用户数组中更新一个用户。我从req.body
获取用户ID,以使其与我的数据库匹配。
我的请求是这样的:
我想根据这样的请求进行更新:
data = {
stats={
power:"10",
vitality:"20"
}
}
预先感谢, 干杯
答案 0 :(得分:1)
您可以像这样进行更新:
YourSchema.update({
'users.id': '5bcb7c7ff9c5c01b9482d243'
}, {
$set: {
'users.$.stats': data.stats
}
})
哪个ID(5bcb7c7ff9c5c01b9482d243
power
统计信息的第一个用户更新为20
这是结合使用update
和$
positional operator来更新数组中的元素。
只需在您的帖子/补丁请求中进行设置。
答案 1 :(得分:0)
您应该使用id
来检索用户的req.params
,但是由于您是从正文中检索出来的,因此我的回答将基于此:
app.put('/api/users/:user_id', function(req, res) {
var id = req.body.id;
var newUser = req.body.user;
User.findById(id, function (err, user) {
if (err) return handleError(err);
user.set(newUser);
user.save(function (err, updatedUser) {
if (err) return handleError(err);
res.send(updatedUser);
});
});
});