Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongodb/mongoose中的保存方法_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript mongodb/mongoose中的保存方法

Javascript mongodb/mongoose中的保存方法,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,这是我的第一个问题。我试图在我的收藏中保存文档,但它不起作用。函数的响应和我想要的完全一样,但它并没有保存在我的数据库中。在另一个控制器(createRoom)foundUser.save()中,它可以工作,但在此控制器中它不能工作。提前谢谢 我正在使用mongodb/Mongoose和express const-removoom=async(请求、恢复、下一步)=>{ const{roomId,userData}=req.body; const{userId,token}=userData;

这是我的第一个问题。我试图在我的收藏中保存文档,但它不起作用。函数的响应和我想要的完全一样,但它并没有保存在我的数据库中。在另一个控制器(createRoom)foundUser.save()中,它可以工作,但在此控制器中它不能工作。提前谢谢

我正在使用mongodb/Mongoose和express

const-removoom=async(请求、恢复、下一步)=>{
const{roomId,userData}=req.body;
const{userId,token}=userData;
让用户使用;
让更新的房间;
设indexOfNamespaces;
试一试{
foundUser=wait User.findById(userId)
foundUser.namespaces.forEach((ns,i1)=>{
updatedRooms=ns.rooms.filter((room,i2)=>{
如果(room.id==roomId){
indexofnamespace=i1;
}
return room.id!==roomId
})
})   
foundUser.namespaces[indexOfNamespaces].rooms=updatedRooms;
console.log(foundUser);
等待foundUser.save();
}捕捉(错误){
控制台日志(err);
const error=new-HttpError('Sth出错[removoom]”,500);
返回下一个(错误);
}
json({updatedNamespaces:foundUser.namespaces});

}
Mongoose进行了一些优化,只有在字段“更改”时才会实际保存字段。在本例中,您正在修改一个数组,但该数组仍然是与上一个数组“相同”的数组。您需要使用新数组来替换名称空间

例如:

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

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

谢谢您的回答!我原以为是这样的,但是我在重写这个属性时仍然有问题,因为这个数组包含另一个数组,我仍然无法正确地强制save方法。你能帮我吗?你的权利!我错过了那个小细节。我更新了我的回答“TypeError:foundUser.namespaces.split不是函数或其返回值不可编辑”。房间是一个数组的对象,可能这导致了问题?我的坏。。。应该是切片而不是分割。固定的!不客气!如果您需要帮助,请考虑接受我的答案。请尽可能清楚地写出您的问题,并提供更多代码,以便我们能够帮助您。