我有一个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)
}
奇怪的是,保存方法上方的控制台日志显示了我的用户的最新版本,它正确地显示了用户的习惯,更新后的习惯取代了旧习惯--位于旧习惯所在的索引中。
然而,保存方法并没有将此写入我的数据库。我有一个几乎相同的删除方法,它工作得很好。
我试过将PUT转换为POST(我想,“好吧,我实际上是在发布一个新的数组”)--但是没有成功。
2条答案
按热度按时间y1aodyip1#
你可能需要明确地指定你所做的改变或者你改变了哪个属性。当保存嵌套的或者深层的对象属性时,mongoose的处理方式有点令人惊讶。下面是mongoose网站上的文档:请在此处查看
在您的情况下,您可能需要执行额外的步骤,即指定要修改的属性/路径,如下所示:
nr7wwzry2#
对我来说,这是mongoose/mongodb奇怪地不存储该对象的情况
所以我尝试使用JSON parse/stringify将其转换为如下形式:
使用JSON函数