嵌套MongoDB架构的ArrayFilter
我有下面的MongoDB文档,我正在尝试更新嵌套数组中选定的应答对象嵌套MongoDB架构的ArrayFilter,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,我有下面的MongoDB文档,我正在尝试更新嵌套数组中选定的应答对象 { "days":[ { "data":{ "average_score":{ "$numberDecimal":"80" }, "metabolic_score":{
{
"days":[
{
"data":{
"average_score":{
"$numberDecimal":"80"
},
"metabolic_score":{
"$numberDecimal":"80"
},
"cardio_score":{
"$numberDecimal":"80"
},
"glucose_levels":[
{
"_id":{
"$oid":"5fdf461407a0a61cb7593bdb"
},
"start_date":"eee",
"end_date":"eee",
"value":{
"$numberDecimal":"80"
}
}
],
"heart_rates":[
],
"summaries":[
{
"actions":[
],
"_id":{
"$oid":"5fdf5a8182bb38276953c3dc"
},
"questions":[
]
},
{
"actions":[
],
"_id":{
"$oid":"5fdf5b71cac79b28cc840e2b"
},
"questions":[
{
"answers":[
"gugu",
"guru?"
],
"_id":{
"$oid":"5fdf5b71cac79b28cc840e2d"
},
"text":"xxxx",
"selected_answer":"gugu!"
}
]
}
],
"moods":[
{
"_id":{
"$oid":"5fdf478ceec5901d4614188a"
},
"labels":[
]
},
{
"_id":{
"$oid":"5fdf4c3affa900202d89fa7a"
},
"labels":[
]
}
]
},
"_id":{
"$oid":"5fdf461407a0a61cb7593bdc"
},
"day":"18-12-2020"
}
]
}
目前,我使用的代码如下:
User.findOneAndUpdate(
{ _id: getUserId(req), "days.day": req.body.day},
{ $push: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
{ arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
(err, user) => {
if (err) {
res.status(500).send({data: { message: err }});
return;
}
else if (user) {
res.status(200).send({data: { message: "updated!"}})
}
}
)
执行请求后,它会显示“已更新!”,但所选的\u应答条目实际上没有更新。我错过了什么?不知何故,它找不到正确的路径。更新现有条目的正确方法是:
User.findOneAndUpdate(
{ _id: getUserId(req), "days.day": req.body.day},
{ $set: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
{ arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
(err, user) => {
if (err) {
res.status(500).send({data: { message: err }});
return;
}
else if (user) {
res.status(200).send({data: { message: "updated!"}})
}
}
)
更新现有条目的正确方法是:
User.findOneAndUpdate(
{ _id: getUserId(req), "days.day": req.body.day},
{ $set: {"days.$.data.summaries.$[summ].questions.$[quest].selected_answer": req.body.selected_answer}},
{ arrayFilters: [{"summ._id": ObjectID("5fdf5b71cac79b28cc840e2d")}, {"quest._id": ObjectID("5fdf5b71cac79b28cc840e2d")}]},
(err, user) => {
if (err) {
res.status(500).send({data: { message: err }});
return;
}
else if (user) {
res.status(200).send({data: { message: "updated!"}})
}
}
)
如果您只想更新
selected\u-answer
的字段文本,请使用$set而不是$push。啊,这是一个多么愚蠢的错误,现在可以使用了,谢谢。如果您只想更新selected\u-answer
的字段文本,请使用$set而不是$push。啊,多么愚蠢的错误,现在可以使用了,谢谢。