MongoDB查询数据时如何排除req.user._id?filter不生效有什么简洁解决方法?
问题原因
Array.filter()是纯函数不会修改原数组,你执行过滤后没有将返回值赋值给新变量,后续使用的还是未过滤的全量用户数组- MongoDB 文档返回的
_id是ObjectId类型的对象,直接用!==比较的是对象的内存引用地址,哪怕值相同也会返回false,需要先转成字符串再比较
修复方案
方案1:修复现有内存过滤逻辑
把过滤结果赋值给新变量,同时对_id做字符串转换:
const users = await User.find(); if (!users) return res.status(404).json({ success: false, msg: "No user found" }); const filteredUsers = users.filter((u) => u._id.toString() !== req.user._id.toString());
方案2:更简短高效的数据库层过滤(推荐)
不需要查询全量用户再过滤,直接在MongoDB查询阶段就排除当前用户,性能更好代码更短:
const users = await User.find({ _id: { $ne: req.user._id } }); if (!users) return res.status(404).json({ success: false, msg: "No user found" });
这里直接用MongoDB的$ne(不等于)查询运算符,直接在数据库层面就过滤掉了当前登录用户,不需要后续额外处理。
内容的提问来源于stack exchange,提问作者Cihan Özcan
相关产品推荐
相关产品推荐

