Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何检查除当前记录mongoose之外的电子邮件是否已存在_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 如何检查除当前记录mongoose之外的电子邮件是否已存在

Node.js 如何检查除当前记录mongoose之外的电子邮件是否已存在,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我已为产品创建了更新路线。有些字段必须是唯一的 在创建产品时,我会这样检查 const emailExists = await Foodlancer.findOne({ email: values.email }); if (emailExists) { return res.status(400).json({ error: 'Email already used' }); } 但我不知道如何在更新产品时检查电子邮件是否已被使用 如果我使用上面的代码,对于我们正在更新的同一个对象,它将

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

在创建产品时,我会这样检查

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

if (emailExists) {
  return res.status(400).json({ error: 'Email already used' });
}
但我不知道如何在更新产品时检查电子邮件是否已被使用

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

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


有什么建议吗?

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

关于要执行的逻辑检查,为什么不在更新中使用相同的代码进行创建,并添加检查
\u id
是否与
$ne
不同

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


非常感谢:)我已经将模型的
unique
设置为
true
,我不确定
mongoose
在模型级别的唯一性是如何工作的,但是如果它没有在数据库级别创建唯一索引(这也会帮助您进行查询),那么它就不能保证唯一性,例如,它不包括
$out
$merge
输出。
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' });
}