为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb/mongoose 中的保存方法

mongodb/mongoose 中的保存方法

白衣染霜花 2022-06-09 10:54:03
这是我在这里的第一个问题。我试图将文档保存在我的收藏中,但它不起作用。函数的响应与我想要的完全一样,但它没有保存在我的数据库中。在另一个控制器 (createRoom) foundUser.save() 中它可以工作,但在这个控制器中它没有。提前致谢!我正在使用 mongodb/mongooose 和 express。const removeRoom = async (req,res,next) => {   const {roomId, userData} = req.body;   const { userId, token } = userData;      let foundUser;   let updatedRooms;   let indexOfNamespaces;   try {      foundUser = await User.findById(userId)      foundUser.namespaces.forEach((ns,i1)=>{         updatedRooms = ns.rooms.filter((room,i2) => {         if(room.id === roomId){            indexOfNamespaces = i1;         }         return room.id !== roomId      })   })      foundUser.namespaces[indexOfNamespaces].rooms = updatedRooms;   console.log(foundUser);   await foundUser.save();         } catch (err) {      console.log(err);            const error = new HttpError('Sth went wrong [removeRoom]', 500);      return next(error);   }   res.status(201).json({updatedNamespaces: foundUser.namespaces});}
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

Mongoose 做了一些优化,如果它“更改”,它只会实际保存一个字段。在这种情况下,您正在修改一个数组,但该数组仍然是“相同”的数组,因为它仍然===(等于)前一个数组。您需要使用新数组来替换命名空间。


例如:


foundUser.namespaces = [

  ...foundUser.namespaces.slice(0, indexOfNamespaces), 

  { ...foundUser.namespaces[indexOfNamespaces], rooms: updatedRooms }, 

  ...foundUser.namespaces.slice(indexOfNamespaces + 1)

]

现在,当您保存 Mongoose 时,将看到一个“新”数组!==(不等于)前一个数组,因为它是一个新实例,它将保存它。


查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信