这是我在这里的第一个问题。我试图将文档保存在我的收藏中,但它不起作用。函数的响应与我想要的完全一样,但它没有保存在我的数据库中。在另一个控制器 (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 时,将看到一个“新”数组!==(不等于)前一个数组,因为它是一个新实例,它将保存它。
添加回答
举报
0/150
提交
取消