Javascript 更新对象数组mongoose
我知道这个问题可能是初学者的水平,但我还没有找到任何东西。 我想用Javascript 更新对象数组mongoose,javascript,node.js,mongodb,api,mongoose,Javascript,Node.js,Mongodb,Api,Mongoose,我知道这个问题可能是初学者的水平,但我还没有找到任何东西。 我想用mongoose更新对象数组。我感兴趣的是根据索引更新用户数组中的一个对象。 通常一次只更换一个用户 这是我的模式: _id: Schema.Types.ObjectId, name: { type: String, required: true }, gm: { type: Schema.Types.ObjectId, ref: 'User', required: true }, users: [],
mongoose
更新对象数组。我感兴趣的是根据索引更新用户数组中的一个对象。
通常一次只更换一个用户
这是我的模式:
_id: Schema.Types.ObjectId,
name: { type: String, required: true },
gm: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
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" }
]
}
data = {
stats={
power:"10",
vitality:"20"
}
}
我想执行补丁
或post
请求,每次从用户数组更新一个用户。我正在从req.body
获取用户id,以便与我的数据库匹配
我的要求如下:
{
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" }
]
}
data = {
stats={
power:"10",
vitality:"20"
}
}
我想根据如下请求进行更新:
{
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" }
]
}
data = {
stats={
power:"10",
vitality:"20"
}
}
提前感谢,,
干杯您可以执行如下更新:
YourSchema.update({
'users.id': '5bcb7c7ff9c5c01b9482d243'
}, {
$set: {
'users.$.stats': data.stats
}
})
这将使用id将第一个用户更新为5bcb7c7ff9c5c01b9482d243
power
stats至20
这是使用与来更新数组中的元素
只需在post/patch请求中设置即可。我已更新了答案。只需使用
数据设置。stats
,然后。如果我也得到一个包对象,并且请求中缺少一些密钥对,该怎么办?这是在更新
调用之前可以在请求中执行的操作。如果数据
没有您想要的数据等,您可以使用默认值。我只是向mongoose提供请求,而不是整个请求处理程序。我可以创建一个动态$set并只更新我得到的值吗?您可以简单地组合set对象,只需添加要更新的道具:{'users.$.stats.power':data.stats.power,'users.$.stats.other':data.stats.other}
基于您在data.stats