繁体   English   中英

mongodb/mongoose 中的保存方法

[英]save method in 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}); }

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

例如:

foundUser.namespaces = [
  ...foundUser.namespaces.slice(0, indexOfNamespaces), 
  { ...foundUser.namespaces[indexOfNamespaces], rooms: updatedRooms }, 
  ...foundUser.namespaces.slice(indexOfNamespaces + 1)
]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM