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()
?实际上我认为这不会创建单独的集合。如果您想为您的服务模式创建另一个集合,则必须手动创建并保存一个。是的,看起来这就是必须执行的方式。谢谢