提问者:小点点

如何检查电子邮件是否已经存在,不包括当前记录mongoose


我已经为产品创建了更新路线。有些字段必须是唯一的。

当创建一个产品时,我会像这样检查

const emailExists = await Foodlancer.findOne({ email: values.email });

if (emailExists) {
  return res.status(400).json({ error: 'Email already used' });
}

但我不确定在更新产品时如何检查是否已经使用电子邮件。

如果我使用上面的代码,它将为我们正在更新的同一个对象返回true。

有没有排除对象的方法?我查看了$ne$nin,但不确定在这种情况下如何使用它们。

有什么建议吗?


共1个答案

匿名用户

首先,您可以创建一个唯一的索引,并在数据库级别强制执行该索引。这将不允许您插入或更新系统中存在的电子邮件。

关于您想要进行的逻辑检查,为什么不在更新时使用相同的代码进行创建,同时检查_id是否与$ne不同

(我假设您正在使用文档_id进行更新,否则您将使用实际的电子邮件进行更新?)

const documentToUpdateId = new ObjectId(req.body._id);
const emailExists = await Foodlancer.findOne({ email: req.body.email, _id: {$ne: documentToUpdateId}});

if (emailExists) {
  return res.status(400).json({ error: 'Email already used' });
}