【发布时间】:2021-02-11 02:08:36
【问题描述】:
我正在使用猫鼬作为我的项目的数据库,现在我正在努力将数据添加到多个集合中,这是我的路线
router.post('/',add_new_user_to_specific_collection,add_new_user_to_collection_User);
这是中间件代码add_new_user_to_specific_collection:
exports.add_new_user_to_specific_collection = (req, res, next) => {
const {role, fullname, code} = req.body;
const generator = new AvatarGenerator(); // it generate random image, no worry
const hashedPassword = bcrypt.hashSync(code.toString(), 10);
console.log(hashedPassword);
const newUserData = {
password: hashedPassword,
profileImage: generator.generateRandomAvatar(),
};
if (role === 'consultant') {
var newConsultant = new Consultant({
fullname,
_id: new mongoose.Types.ObjectId(),
fullname,
code,
vnumail: code.trim() + '@vnu.edu.vn',
...newUserData,
});
newConsultant
.save()
.then((doc) => {
console.log('New User as Consultant was added');
req.newUserData = newUserData;
next();
})
.catch((err) => {
res.status(500).json({err});
});
}
};
这是给add_new_user_to_collection_User的:
exports.add_new_user_to_collection_User = (req, res, next) => {
const {role, fullname, code} = req.body;
const newUser = new User({
_id: new mongoose.Types.ObjectId(),
role,
fullname,
code,
vnumail: code.trim() + '@vnu.edu.vn',
...req.newUserData,
});
newUser
.save()
.then((doc) => {
console.log('New User added to collection User');
return res.status(200).json({
message: 'User added',
doc,
});
})
.catch((error) => {
console.log(error);
res.status(500).json(error);
});
};
输入数据已完全验证,
在第一次尝试时,它工作得很好,但是当涉及到第二次时,我得到了这个错误:
{
"err.driver": true,
"err.name": "MongoError",
"err.index": 0,
"err.code": 11000,
"err.keyPattern.email": 1,
"err.keyValue.email": null
}
我已经研究了一段时间,看起来电子邮件被重复了,但我没有从前端的正文中分配任何 email 属性
更新:这是我的架构
userSchema:
const mongoose = require('mongoose');
const userSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
code: {
type: String,
required: true,
unique: true,
},
fullname: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
activated: {
type: Boolean,
},
vnumail: {
type: String,
required: true,
unique: true,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,
},
profileImage: {
type: String,
default:
'https://kittyinpink.co.uk/wp-content/uploads/2016/12/facebook-default-photo-male_1-1.jpg',
},
role: {
type: String,
required: true,
enum: [
'consultant',
'parent',
'student',
'specialist',
'uet-leader',
'student-affair-leader',
'academic-leader',
],
default: 'student',
},
});
const User = mongoose.model('User', userSchema);
module.exports = User;
consultantSchema:
const mongoose = require('mongoose');
const consultantSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
fullname: {
type: String,
required: true,
},
code: {
type: String,
required: true,
},
gender: {
type: String,
required: true,
enum: ['Male', 'Female', 'No Record'],
default: 'No Record',
},
birthday: {
type: Date,
},
email: {
type: String,
unique: true,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,
},
vnumail: {
type: String,
required: true,
unique: true,
match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/,
},
profileImage: {
type: String,
},
address: {
type: String,
},
academicRank: {
type: String,
required: true,
enum: ['master', 'phd', 'professor'],
default: 'master',
},
specialize: {
type: String,
},
});
const Consultant = mongoose.model('Consultant', consultantSchema);
module.exports = Consultant;
非常感谢你帮助我,这对我来说意义重大,我希望你有一个美好的一天
【问题讨论】:
标签: javascript web mongoose duplicates backend