Express 是否应在Model.create()上创建新集合

Express 是否应在Model.create()上创建新集合,express,mongoose,mongoose-schema,mongoose-populate,Express,Mongoose,Mongoose Schema,Mongoose Populate,我和猫鼬一起工作,有两个模型。用户登录方法时,用户模型和服务模型将findOne()User(如果存在)或create()根据req.body传入的内容创建新用户 我的服务架构如下所示: const serviceSchema = new mongoose.Schema({ name: { type: String, default: 'contentEditor' }, display: { type: String, default: 'Conte

我和猫鼬一起工作,有两个模型。用户登录方法时,用户模型和服务模型将
findOne()
User(如果存在)或
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],
    },
  },
);
我的用户模式有点大,我删除了一些字段/值对,但嵌入服务模式的部分如下所示:

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
端点时,将使用服务文档正确创建一个新用户,但在Mongoose数据库中只存在一个用户集合。如何创建用户集合和服务集合

编辑:下面是我创建/查找用户登录时使用的功能。当找到一个现有用户时,通过他们的电子邮件,它将返回该用户。如果找不到该用户,它将创建一个新用户

这两种行为都如预期的那样包括向新创建的用户添加服务。不期望的是,只有一个集合被添加到数据库中

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));
});

确保将serviceSchema设置为mongoose模型

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

您还必须使用mongooses
model.save()
function

抱歉模式已经是两个模型了,我只是为了节省空间而省略了代码,我将使用创建用户模型的函数更新OP。我假设create调用
save()
?实际上我认为这不会创建单独的集合。如果您想为您的服务模式创建另一个集合,则必须手动创建并保存一个。是的,看起来这就是必须执行的方式。谢谢