(mongoose)如何优化这段十分影响服务器性能的代码?
发布于 7 年前 作者 DoubleCG 2967 次浏览 来自 问答

代码如下:

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

回到顶部