Я работаю с понедельника goose и имею две модели. Модель User и модель Service, когда пользователь входит в метод, будет 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
, новый пользователь будет правильно создан с служебным документом, но в базе данных Mon goose существует только коллекция пользователей. Как сделать так, чтобы создавалась коллекция «Пользователи» и «Службы»?
Редактировать: Ниже приведена функция, с помощью которой я создаю / нахожу пользователя при входе в систему. Когда существующий пользователь найден, по электронной почте он вернет этого пользователя, если пользователь не найден, тогда он создаст нового ...
Оба поведения соответствуют ожидаемым , включая добавление Услуги вновь созданному Пользователю. Чего не ожидается, так это того, что в БД добавляется только ОДНА коллекция.
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));
});