mongodb/mongoose 中的保存方法

这是我在这里的第一个问题。我试图将文档保存在我的收藏中,但它不起作用。函数的响应与我想要的完全一样,但它没有保存在我的数据库中。在另一个控制器 (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});


}


白衣染霜花
浏览 161回答 1
1回答

UYOU

Mongoose 做了一些优化,如果它“更改”,它只会实际保存一个字段。在这种情况下,您正在修改一个数组,但该数组仍然是“相同”的数组,因为它仍然===(等于)前一个数组。您需要使用新数组来替换命名空间。例如:foundUser.namespaces = [  ...foundUser.namespaces.slice(0, indexOfNamespaces),   { ...foundUser.namespaces[indexOfNamespaces], rooms: updatedRooms },   ...foundUser.namespaces.slice(indexOfNamespaces + 1)]现在,当您保存 Mongoose 时,将看到一个“新”数组!==(不等于)前一个数组,因为它是一个新实例,它将保存它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript