gpt4 book ai didi

node.js - MongoDB 和 NodeJS 如果不存在则插入否则抛出错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:51 25 4
gpt4 key购买 nike

首先,我想说我知道还有其他几篇文章与插入/更新(如果不存在)有些相关;但是,我的情况有点不同,不适合其他帖子。

如果用户的电子邮件不存在,我将尝试插入新的用户注册记录。我现在所做的就是插入记录。

一个问题是,使用 upsert:true 进行重复检查实际上不起作用,因为在插入记录时会生成所有唯一值,如 JSON Web token 创建日期 等。这是我当前的代码:

MongoClient.connect('mongodb://localhost:27017/norad', function(err, db){
if (err) return router.error( Error(err) );
db.collection('users', function(err, coll){
if (err) return router.error( Error(err) );

coll.insert({
'email' : useremail
,'pass' : userpass
,'total_req': 0
,'threshold_req': 0
,'threshold_start_time': 0
,'ak' : activation_key
,'activated': false
,'adm' : false
,'iat' : iat
,'created' : iat
,'modified' : iat
}
,function(err, writeResults){
console.log( writeResults );
if ( err && err.code == 11000 ) return router.error( ErrorHandler('User already exists.', 'Conflict', 409) )
if ( err ) return router.error( Error(err) );
var r = {'email': writeResults.ops[0].email
,'Response':'Your activation code has been emailed to the address used in registration. Please check your email and follow the instructions for account activation.'
}

,scallback = function(){ return router.submit(r) }
// send the activation email to the user
,res = ActivationEmail(activation_key, useremail, scallback, router)
;
if ( res instanceof Error ) router.error( Error(err) );
}
);

});
});

我没有收到任何错误。相反,即使用户的电子邮件已存在于表中,这也可以正常工作并在每次调用时插入一条新记录。

我正在尝试添加功能来检查用户的电子邮件是否已存在于表中,如果存在则抛出错误,否则创建新记录。

最佳答案

您需要创建unique index电子邮件字段上。例如。在 mongo shell 中:

db.users.createIndex(
{ email: 1},
{ unique: true }
);

关于node.js - MongoDB 和 NodeJS 如果不存在则插入否则抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47625100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com