【问题标题】:FindOneAndUpdate a Nested Array in My Mongoose ModelFindOneAndUpdate 在我的 Mongoose 模型中的嵌套数组
【发布时间】: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 并更新我希望更新的字段。顺便说一下,R​​eq.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"

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    好吧,看了又看,我认为我搞砸的是传递给 req.body 一个像这样构造的对象 { session_notes: 'Now Its Gone' } 最终工作的是使用 { training_block.$.session_notes: '现在它走了'}。

    我不完全确定为什么会这样,但我认为这是因为 training_block 是一个数组并使用 .$。遍历数组以获取我想要 $set 的对象。也许其他人可以为我澄清一点。但是我最初的问题已经解决了。

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2016-04-25
      • 2017-09-26
      • 2018-08-18
      • 1970-01-01
      • 2017-07-06
      • 2020-06-25
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多