Mongoose使用find()查询时如何忽略object字段的特定ObjectId值
实现方案
你只需要在Mongoose的查询条件中加入_id的不等于($ne)过滤规则即可,同时注意你现有代码混用了async/await和回调函数,需要调整避免逻辑异常。
修改后的完整代码
// CHECK FOR DUPLICATE USER ACCOUNT router.post("/api/verification/check-for-duplicate-user", auth, async (req, res) => { try { // 新增_id: {$ne: req.body.userId} 过滤当前用户自身的账号 const duplicates = await User.find({ DOB: req.body.DOB, lastName: req.body.lastName, _id: { $ne: req.body.userId } }) console.log(`FOUND DUPLICATES`) return res.send(duplicates) } catch (err) { console.log(`ERROR ${err}`) res.status(400).send() } } )
改动说明
- 第一个参数是查询过滤对象,新增
_id: { $ne: req.body.userId }规则,MongoDB的$ne操作符会筛选出字段值不等于指定值的文档,自动排除当前登录用户的账号。如果你的req.body.userId是字符串格式,Mongoose会自动转换为ObjectId类型和数据库的_id匹配,无需手动转换。 - 移除了
find方法内部的回调函数:你已经使用了async/await语法,不需要再嵌套回调,错误和成功逻辑统一放到try/catch块中处理即可,避免重复逻辑和异步时序问题。
如果遇到类型匹配异常,可以手动将字符串ID转换为ObjectId,写法如下:
const mongoose = require('mongoose') // 替换查询条件中的_id规则为 _id: { $ne: mongoose.Types.ObjectId(req.body.userId) }
内容的提问来源于stack exchange,提问作者user15192869
相关产品推荐
相关产品推荐

