Если новая Коллекция будет создана на Model.create () - PullRequest
0 голосов
/ 15 января 2020

Я работаю с понедельника 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));
});

1 Ответ

0 голосов
/ 15 января 2020

Убедитесь, что вы делаете serviceSchema моделью mon goose.

const Services = mongoose.model('Service', serviceSchema)

Вы также должны сохранить ее с помощью функции mongooses model.save()

...