【发布时间】:2022-01-28 21:22:00
【问题描述】:
我在 mongodb 的数组中保存(相同)值时遇到问题:
这是我用来创建用户的架构:
const userSchema = new mongoose.Schema(
{
email: { type: String, required: true },
addr: { type: String, required: true, unique: true },
isFirstConnection: { type: Boolean, default: true, required: true },
type:{ type: String },
firstName:{ type: String },
lastName:{ type: String },
companyName:{ type: String },
birthDate:{ type: String },
nationality:{ type: String },
description:{ type: String },
avatar:{ type: String },
isAdmin: { type: Boolean, default: false, required: true },
isSeller: { type: Boolean, default: false, required: true },
seller: {
name: String,
banner: String,
description: String,
rating: { type: Number, default: 0, required: true },
numReviews: { type: Number, default: 0, required: true },
collection: {type: Array}
//collection: [{type: String, required:true ,unique: true, default:'My Default Collection'}]
},
},
{
timestamps: true,
}
);
const User = mongoose.model('User', userSchema);
export default User;
这里是我创建新用户的代码:
userRouter.post(
'/signin',
expressAsyncHandler(async (req, res) => {
const user = await User.findOne({ addr: req.body.addr });
if (user) {
res.send({
_id: user._id,
addr: user.addr,
email: user.email,
isAdmin: user.isAdmin,
isSeller: user.isSeller,
isFirstConnection: user.isFirstConnection,
token: generateToken(user),
});
return;
} else {
const newUser = new User({
email: req.body.email,
addr: req.body.addr,
seller:{
collection:["Default Collection"],
},
});
const createdUser = await newUser.save();
res.send({
_id: createdUser._id,
email: createdUser.email,
isAdmin: createdUser.isAdmin,
isSeller: createdUser.isSeller,
isFirstConnection: createdUser.isFirstConnection,
token: generateToken(createdUser),
});
}
})
);
实际状态:
如果我的数据库中没有用户,则可以创建用户。但是在数据库(mongodb)中创建用户后,我无法创建另一个用户。在研究了这个问题后,我知道这个问题来自我的 userSchema 在这一行:
collection: {type: Array}
但我不知道为什么?我发现如果我尝试使用“集合”数组中的值保存用户,该值与另一个用户在同一数组中的值相同,则创建用户失败。但我真的不明白为什么。
所以我的问题是:
如何在我的“集合”数组以及用户之间保存相同的值?
感谢您的帮助,我完全迷路了......
【问题讨论】:
标签: arrays mongodb mongoose duplicates save