【问题标题】:Mongoose Not Saving Nested Arrays / Deep Objects Using .save() functionMongoose 不使用 .save() 函数保存嵌套数组/深层对象
【发布时间】:2020-07-14 02:28:46
【问题描述】:

我有一个 MongoDB,我正在使用 Mongoose API。

我有一个方法,我希望它能让我在我的用户对象中找到一个“习惯”。习惯是生活在一系列习惯中的对象。我正在向该方法传递一个 UUID 来查找习惯。

这是我的方法:

async updateHabit(req, res) {
    const { user_id } = req.headers
    const { habitId  } = req.params
    const habit = req.body
    
    const user = await User.findById(user_id)
  
    const habitIndex = user.habits.findIndex(habit => habit.id == habitId)

    user.habits[habitIndex] = habit

    console.log(user.habits)

    await user.save()

    return res.json(user.habits)
  }

奇怪的是保存方法正上方的控制台日志显示我的用户的最新版本,显示正确。它记录用户的习惯以及旧习惯的更新习惯 - 在旧习惯所在的索引处。

但是,save 方法并没有将其写入我的数据库。我有一个几乎相同的删除方法,它工作得很好。

我曾尝试从 PUT 更改为 POST(想,'好吧,我实际上是在发布一个新数组') - 但没有奏效。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可能需要明确指定更改或更改的属性。使用嵌套或深层对象属性保存时,mongoose 的处理方式有点令人惊讶。这是猫鼬网站上的文档:check here

    在您的情况下,您可能需要做一个额外的步骤,即指定要修改的属性/路径,如下所示:

    user.markModified('habits')
    await user.save()
    

    【讨论】:

      猜你喜欢
      • 2016-03-01
      • 1970-01-01
      • 2020-12-15
      • 2021-08-13
      • 2017-06-26
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多