下面是我的用户模式在user.js模型-
var userSchema = new mongoose.Schema({
local: {
name: { type: String },
email : { type: String, require: true, unique: true },
password: { type: String, require:true },
},
facebook: {
id : { type: String },
token : { type: String },
email : { type: String },
name : { type: String }
}
});
var User = mongoose.model('User',userSchema);
module.exports = User;
这就是我在控制器中使用它的方式
var user = require('./../models/user.js');
这就是我在数据库中保存它的方式
user({'local.email' : req.body.email, 'local.password' : req.body.password}).save(function(err, result){
if(err)
res.send(err);
else {
console.log(result);
req.session.user = result;
res.send({"code":200,"message":"Record inserted successfully"});
}
});
错误- - - - - -
{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1 dup key: { : null }"}
我检查了db集合,没有这样的重复条目存在,让我知道我做错了什么?
供您参考- req.body.email和req.body.password是抓取值。
我也检查了这篇文章,但没有帮助
如果我完全删除,然后它插入文档,否则它抛出错误“重复”错误,即使我在local.email中有一个条目
我想像向一个5岁的孩子解释一样解释这个问题的答案/解决方案,这样每个人都能理解。
我有一个应用程序。我想让人们用他们的电子邮件、密码和电话号码来注册。
在我的MongoDB数据库中,我希望根据他们的电话号码和电子邮件唯一地识别人们——因此这意味着每个人的电话号码和电子邮件都必须是唯一的。
然而,有一个问题:我发现每个人都有电话号码,但不是每个人都有电子邮件地址。
那些没有电子邮件地址的人已经向我保证他们下周会有一个电子邮件地址。但我还是想让他们注册——所以我告诉他们继续注册他们的电话号码,因为他们的电子邮件输入字段是空的。
他们这样做。
我的数据库需要一个唯一的电子邮件地址字段-但我有很多人用“空”作为他们的电子邮件地址。所以我在我的代码中告诉我的数据库模式允许空/空的电子邮件地址字段,当那些承诺下周将电子邮件添加到他们的个人资料的人时,我将用电子邮件唯一地址填充这些字段。
所以现在对每个人来说都是双赢(除了你;-]):人们注册,我很高兴有他们的数据…我的数据库很高兴,因为它被很好地使用……但是你呢?我还没有给出创建模式的代码。
代码如下:
注意:在电子邮件中的稀疏属性,是什么告诉我的数据库允许空值,稍后将被填充为唯一的值。
var userSchema =新的猫鼬。模式({
本地:{
名称:{类型:字符串},
email:{类型:字符串,要求:true,索引:true,唯一:true,稀疏:true},
密码:{类型:字符串,要求:true},
},
facebook: {
id:{类型:字符串},
token:{类型:字符串},
email:{类型:字符串},
名称:{类型:字符串}
}
});
var User = mongoose.model('User',userSchema);
模块。出口=用户;
我希望我已经解释清楚了。
NodeJS编码/破解快乐!
我想像向一个5岁的孩子解释一样解释这个问题的答案/解决方案,这样每个人都能理解。
我有一个应用程序。我想让人们用他们的电子邮件、密码和电话号码来注册。
在我的MongoDB数据库中,我希望根据他们的电话号码和电子邮件唯一地识别人们——因此这意味着每个人的电话号码和电子邮件都必须是唯一的。
然而,有一个问题:我发现每个人都有电话号码,但不是每个人都有电子邮件地址。
那些没有电子邮件地址的人已经向我保证他们下周会有一个电子邮件地址。但我还是想让他们注册——所以我告诉他们继续注册他们的电话号码,因为他们的电子邮件输入字段是空的。
他们这样做。
我的数据库需要一个唯一的电子邮件地址字段-但我有很多人用“空”作为他们的电子邮件地址。所以我在我的代码中告诉我的数据库模式允许空/空的电子邮件地址字段,当那些承诺下周将电子邮件添加到他们的个人资料的人时,我将用电子邮件唯一地址填充这些字段。
所以现在对每个人来说都是双赢(除了你;-]):人们注册,我很高兴有他们的数据…我的数据库很高兴,因为它被很好地使用……但是你呢?我还没有给出创建模式的代码。
代码如下:
注意:在电子邮件中的稀疏属性,是什么告诉我的数据库允许空值,稍后将被填充为唯一的值。
var userSchema =新的猫鼬。模式({
本地:{
名称:{类型:字符串},
email:{类型:字符串,要求:true,索引:true,唯一:true,稀疏:true},
密码:{类型:字符串,要求:true},
},
facebook: {
id:{类型:字符串},
token:{类型:字符串},
email:{类型:字符串},
名称:{类型:字符串}
}
});
var User = mongoose.model('User',userSchema);
模块。出口=用户;
我希望我已经解释清楚了。
NodeJS编码/破解快乐!