Mongodb Mongoose嵌套对象不更新';无法创建字段";"富",;在元素中';
我有一个类似的问题 我正在尝试使用“findAndUpdate”创建一个新字段。我已经尝试了所有的方法,$set,$push,$addSet。。。它们似乎都不起作用,我也一直犯同样的错误 代码如下:Mongodb Mongoose嵌套对象不更新';无法创建字段";"富",;在元素中';,mongodb,mongoose,Mongodb,Mongoose,我有一个类似的问题 我正在尝试使用“findAndUpdate”创建一个新字段。我已经尝试了所有的方法,$set,$push,$addSet。。。它们似乎都不起作用,我也一直犯同样的错误 代码如下: router.post('/accept', auth, async (req, res) => { const useremail = user.email const originalEvent = await Event.findOneAndUpdate({eve
router.post('/accept', auth, async (req, res) => {
const useremail = user.email
const originalEvent = await Event.findOneAndUpdate({eventId: 61469041, isOrganizer: true, "attendees.email": useremail},
{"$push":{"attendees.status" : "accepted"}},
{new: true})
res.status(200).json({originalEvent, event})
}
catch (e) {
res.status(400).json({ msg: e.message, success: false });
}
});
以下是错误代码:
"Cannot create field 'status' in element {attendees: [ { _id: ObjectId('5f80a02a82dceb2810e0aa66'), email: "bob@gmail.com", name: "Bob" } ]}"
以下是我尝试更新的对象:
{
"organizer": {
"email": "alex@gmail.com",
"name": "Alex"
},
"_id": "5f80a02a82dceb2810e0aa65",
"title": "Go to the beach",
"eventId": 61469041,
"isOrganizer": true,
"user": "5f05f23417ca6ab69ccc4cf2",
"attendees": [
{
"_id": "5f80a02a82dceb2810e0aa66",
"email": "bob@gmail.com",
"name": "Bob"
}
],
"__v": 0,
}
预期成果:
{
"organizer": {
"email": "alex@gmail.com",
"name": "Alex"
},
"_id": "5f80a02a82dceb2810e0aa65",
"title": "Go to the beach",
"eventId": 61469041,
"isOrganizer": true,
"user": "5f05f23417ca6ab69ccc4cf2",
"attendees": [
{
"_id": "5f80a02a82dceb2810e0aa66",
"email": "bob@gmail.com",
"name": "Bob",
"status": "accepted"
}
],
"__v": 0,
}
解决方法如下:
const originalEvent = await Event.findOneAndUpdate({eventId: eventId, "isOrganizer": true,
"attendees": {$elemMatch: {email: useremail}}
},
{ $set: { "attendees.$.status": "accepted"} }
)
res.status(200).json(originalEvent)
}
引用
attenders.status
没有意义,因为在模式中attenders
不是一个对象(带有status
等字段),而是一个数组。但你可以用不同的方式。如果您有要修改的与会者索引,可以执行{$set:{“Attendeers.0.status:“accepted”}
,其中0
是数组中的索引
另外,关于问题的前半部分,您看到的错误是因为
$push
在阵列上工作。因此,为了使您的操作正常工作,您必须首先初始化这样一个对象{attenders:{status:[]}}
如果字段不是数组,则操作将失败。()