findOne()
传递的内容将create()
用户(如果存在)或req.body
一个新用户。我的服务模式如下:
const serviceSchema = new mongoose.Schema({
name: {
type: String,
default: 'contentEditor'
},
display: {
type: String,
default: 'Content Editor'
},
accessLevel: {
type: Number,
min: 0,
max: 4,
default: 4
}
});
我的用户模式更大一点,我删除了一些字段/值对,但是嵌入服务模式的部分看起来像这样:
const userSchema = new mongoose.Schema( { email: { type: String, required: [true, 'Must have a email address'], trim: true, unique: true, }, firstName: { type: String, }, lastName: { type: String, }, services: { type: [serviceSchema], ref: 'Services', default: [serviceSchema], }, }, );
当我点击/api/v1/login
端点时,将使用Service文档正确创建一个新用户,但是在Mongoose数据库中仅存在一个User集合。如何做到这样,才能同时创建“用户”集合和“服务”集合?编辑:以下是我在用户登录时创建/查找用户的功能。当找到现有用户时,如果没有找到该用户,它将通过他们的电子邮件返回该用户,然后将创建一个新用户...
两种行为均符合预期
包括
将服务添加到新创建的用户。出乎意料的是,只有一个集合被添加到数据库中。const login = catchAsync(async ({ body: { email, password } }, res, next) => {
if (!email || !password) {
return next(new AppError('Please provide email and password', 400));
}
const { Success } = await webApi(email, password);
const mongoUser = await User.findOne({ email });
if (Success && mongoUser) {
return createSendtoken(mongoUser, 200, res);
}
if (Success && !mongoUser) {
const newUser = await User.create({ email });
return createSendtoken(newUser, 201, res);
}
return next(new AppError('User not found', 404));
});
我正在使用猫鼬,并且有两个模型。用户模型和服务模型,当用户登录方法时,将根据存在的内容找到一个用户(如果存在)或创建()一个新用户...
const Services = mongoose.model('Service', serviceSchema)