【发布时间】:2016-08-28 01:15:51
【问题描述】:
我正在尝试建立一个论坛来学习 MEAN 堆栈。我在使用猫鼬时遇到了问题...
我有这个……
var UserSchema = new Schema({
id: ObjectId,
firstName: String,
lastName: String,
role: String,
email: {
type: String,
unique: true
},
password: String,
workers: [WorkerSchema]
});
var TopicSchema = new Schema({
id: ObjectId,
title: String,
moderator: UserSchema,
posts: [PostSchema]
});
var Topic = mongoose.model('Topic', TopicSchema);
app.post('/topics', requireLogin, function(req, res) {
User.findOne({"email": req.session.user.email}, function(err, user) {
if (user.role == "moderator" || user.role == "admin") {
var topic = new Topic({
title: req.body.title,
moderator: req.session.user,
posts: []
});
topic.save(function(err) {
if (err) console.log(err);
res.status(204).end();
});
}
});
});
我的问题是......当我将主题发布到 /topics 时,它第一次工作,用一个项目填充主题集合。但是,当我再次从同一个用户发布到 /topics 时,我得到一个 E11000 MongoError,如下所示: 消息:'E11000 重复键错误索引:MY_MONGO_DB.topics.$moderator.email_1 重复键:{:“myuser@example.com”}'
我知道从 UserSchema 的电子邮件字段中删除 'unique: true' 属性可以解决此问题,但我不想删除该唯一性属性,因为我在代码的其他地方使用它来确保用户是唯一的通过电子邮件。
有没有办法解决这个问题?换句话说,有没有什么方法可以保留 'unique: true' 属性,同时保留用户能够发布多个主题而不会触发 E11000 错误的能力?
【问题讨论】:
标签: node.js mongoose mean-stack mongoose-schema