通过电子邮件地址同时在数据库MONGODB的两个集合中搜索用户



我的数据库mongodb中有两个集合tutorsusers。我在控制器中有一个signin功能。在signin内部,我有tutorsusers。我应该添加什么条件才能在tutorsusers集合中搜索用户?

控制器/auth

const User = require('../models/user');
const Tutor = require('../models/tutor');
module.exports.signin = (req, res) => {
const {email, password, remember} = req.body;
//User
User.findOne({email}).exec((err, user) => {
if(err || !user) {
return res.status(400).json({
error: 'User with that email does not exist. Please signup'
});
}
if(!user.authenticate(password)) {
return res.status(400).json({
error: 'Email and password do not match'
});
}
const {_id, name, surname, email} = user;
if (remember) {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '7d'});
return res.json({
token,
user: {_id, name, surname, email}
});
} else {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '2m'});
return res.json({
token,
user: {_id, name, surname, email}
});
}
});

//tutor
Tutor.findOne({email}).exec((err, tutor) => {
if(err || !tutor) {
return res.status(400).json({
error: 'Tutor with that email does not exist. Please signup'
});
}
if(!tutor.authenticate(password)) {
return res.status(400).json({
error: 'Email and password do not match'
});
}
const {_id, name, surname, email} = tutor;
if (remember) {
const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET, {expiresIn: '7d'});
return res.json({
token,
tutor: {_id, name, surname, email}
});
} else {
const token = jwt.sign({_id: tutor._id}, process.env.JWT_SECRET, {expiresIn: '2m'});
return res.json({
token,
tutor: {_id, name, surname, email}
});
}
});
};

这是设计数据库模型的糟糕方法。相反,创建一个单独的集合,称之为users,它可以有一个类似userType的字段,可以是TutorUser

用户模型User.js

var userSchema = {
type: String,
enum: ['tutor', 'user'],
default: 'user'
}

并像这样查询:

Tutor.findOne(...) // to query for a tutor
User.findOne(...) // to query for a user

最新更新