(mongoose)如何优化这段十分影响服务器性能的代码?
代码如下:
router.post('/close_str_mess',urlencodedParser,(req,res)=>{
var sess = req.session;
var data = JSON.parse(req.body.J_data);
Message.find({username:data.username},(err,detail)=>{
var mess = detail[0].mess;
for(let i=0;i<mess.length;i++){
if(mess[i].from.username===data.str_username){
mess.splice(i,1);
}
}
Message.update({username:data.username},{$set:{mess}},err=>{
if(err) throw err;
});
});
});
\n```
代码作用解析:查找用户的所有消息,并检查每条消息的来源,如果消息符合要删除的来源,则删除这条消息.
但是我把用户接受到的所有消息都集中在一起,导致效率很低,(本地测试几秒钟也删除不完).
我认为这是数据表设计的错误:
{
username:String,
mess:Array
}
mess是所有消息的集合.
mess=[{
from:{
username:String,
nickname:String
},
body:{
content:String,
time:String
}
},......]
现在我想知道有没有一个方法可以直接删除目标数据,而不用先find再update.
2 回复
我觉得可以在mess再冗余一个username的Array username_arr,然后直接remove data.str_username $in username_arr