【发布时间】:2020-07-26 09:19:26
【问题描述】:
我有一个如下所示的模型架构
sessionSchema = new Schema(
{
day: { type: Date, required: true },
training_block: [
{
start: { type: String },
session_notes: { type: String },
end: { type: String },
},
],
days_notes: { type: String },
petId: { type: Schema.Types.ObjectId, ref: "Pet", required: true },
},);
在我的应用程序中,我有一个 API 调用来使用 PATCH 查找和更新会话的 training_block。我的前端请求工作正常,但我认为我设置 FindOneAndUpdate mongoose 查询不正确。尽管我认为我这样做就像我在论坛上的其他线程中找到的示例一样。这是我对数据库的查询的样子。
findOneUpdateDetails: function (req, res, model) {
console.log(req.params.session) // logged as the expected value 5f1ae779ebb86c229546d5ea
console.log(req.params.block) // logged as the expected value 5f1b007d43cae7266ff193de
console.log(req.body) // logged as the expected object { session_notes: 'Now Its Gone' }
model
.findOneAndUpdate(
{ "_id": req.params.session, "training_block._id": req.params.block },
{
$set: req.body,
},
{ new: true }
)
.then((dbModel) => res.json(dbModel))
.catch((err) => res.status(422).json(err));
},
有了这个,我找到了正确的会话,但它没有进入正确的 training_block 并更新我希望更新的字段。顺便说一下,Req.Body 是一个带有 { fieldname: "string value" } 的对象,所以我可以对我要更新的任何字段使用相同的查询。
任何帮助将不胜感激,我希望我提供了足够的信息。最后,如果它有帮助,就是将资源发送回前端。
day: "2020-07-24T13:51:53.066Z"
petId: "5f1a63f65110a71ec6876b82"
training_block: Array(2)
0: {_id: "5f1b007d43cae7266ff193de", start: "05:45", end: "05:59", session_notes: "tThis is some text"}
1: {_id: "5f1ca6466c3fb80dff0b5aca", start: "17:30", end: "17:45", session_notes: "asdffasdfasdfasfd"}
length: 2
__proto__: Array(0)
__v: 0
_id: "5f1ae779ebb86c229546d5ea"
【问题讨论】: