我正在将mongoDB与Mongoose一起使用来构建API。
我有两个(也许很快)模式:
user : {
name : String,
email : {
required: true,
unique : true
}
}
和
ticket : {
title : String,
author : userModel.schema,
}
每个用户都必须具有唯一的电子邮件,因为他们会将其用作登录凭据。 每个用户都可以编写票证,每次发送票证时,我都在author字段中添加编写票证的用户对象。
到目前为止,每个用户只能写一张票,如果我尝试第二张票,则会出现此错误:
E11000 duplicate key error collection: BTB_DB.tickets index: author.email_1 dup key: { : "email@email.com"}
我发现Mongo实际上为票证创建了一个索引,以确保author.email唯一,请参见下面的mongo指南针屏幕截图:
该索引也只显示在票证集合中,而不显示在用户集合中? 该索引来自哪里?
我的问题是:是否可以在用户模式中保持电子邮件字段的唯一性,而在其他模式中保持唯一性?
如果没有其他方法可以将用户嵌套在票证中?我只尝试了一点userId和mongoose的填充方法,是否应该在该解决方案上投入更多时间?我真的很想让用户参与其中。
谢谢!
答案 0 :(得分:1)
在故障单中定义作者
ticket : {
title : String,
author : {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
}
在获取票证时,如果要让票证所属的用户使用populate()这样,
Ticket.find().populate('author');
以及创建票证时,请确保在“作者”字段中提供用户的_id
new Ticket({'title': 'title of the ticket', 'author':'_idOfTheUser'})