Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript 仅当不存在时插入文档_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 仅当不存在时插入文档

Javascript 仅当不存在时插入文档,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在使用创建文档 Subscription.create({ email: req.body.email }, (err, subscription) => { // }); 在我的Mongoose模式中,我将电子邮件字段设置为唯一的,因此不可能使用同一电子邮件创建多个文档 但我不在乎某封邮件是否已经存在,所以我不希望在收到邮件时出现重复的错误。如何仅在电子邮件不存在时插入,如果电子邮件存在时不创建,但不告诉用户 我认为最好不要告诉用户数据库中是否已经存在电子邮件,因为它可以用来测

我正在使用创建文档

Subscription.create({ email: req.body.email }, (err, subscription) => {
  //
});
在我的Mongoose模式中,我将电子邮件字段设置为唯一的,因此不可能使用同一电子邮件创建多个文档

但我不在乎某封邮件是否已经存在,所以我不希望在收到邮件时出现重复的错误。如何仅在电子邮件不存在时插入,如果电子邮件存在时不创建,但不告诉用户


我认为最好不要告诉用户数据库中是否已经存在电子邮件,因为它可以用来测试电子邮件是否与站点关联。看起来问题不大,但出于隐私考虑,我仍然认为最好不要告诉别人。

在mongoose中,您可以使用pre函数

var schema = new Schema(..);
schema.pre('save', function(next) {
  // Check if the mail exists. If it does, just throw an exception
  // If not, just create the thing using next.
  next();
});

在调用save函数时,应小心捕获异常。我相信这可以解决问题。

我们可以在创建文档之前通过电子邮件找到,不是吗?正如@BNilsou所说,在创建文档之前,您只需查看数据库,使用mongoose您可以使用查询,而且告诉用户“此电子邮件已被使用”也不是安全问题,我访问过的每个网站都会收到一份注册表“此电子邮件/用户名已在使用中“我的经验是,在我的网站上,即使我已经注册了时事通讯,我仍然能够再次注册。但也许我应该考虑让用户知道这是最好的检查我的控制器?这是一个味道的问题。由于效率等原因,我总是更喜欢使用库中的内置函数(至少是著名的函数)。此外,如果您需要添加更多规则,您可以去同一个地方