【发布时间】:2019-11-06 13:45:14
【问题描述】:
我正在使用 mongoDB 和 Mongoose 来构建 API。
我有两个(可能更快)架构:
user : {
name : String,
email : {
required: true,
unique : true
}
}
和
ticket : {
title : String,
author : userModel.schema,
}
每个用户都必须拥有唯一的电子邮件,因为他们会将其用作登录凭据。 每个用户都可以写一张票,每次发送一张票,我都会在作者字段中添加写票的用户对象。
每个用户现在只能写一张票,如果我尝试第二张票,我会遇到这个错误:
E11000 duplicate key error collection: BTB_DB.tickets index: author.email_1 dup key: { : "email@email.com"}
我发现 Mongo 实际上为门票创建了一个索引,以确保 author.email 是唯一的,请参见下面我的 mongo 指南针的屏幕截图:
该索引也只存在于门票集合,而不是用户集合? 该索引从何而来?
我的问题是:是否可以让电子邮件字段在用户架构中保持唯一,但在其他架构中不唯一?
如果没有,还有其他方法可以将用户嵌套在票证中吗?我只尝试了一点 userId 和 mongoose 的填充方法,我应该在该解决方案上投入更多时间吗?我真的很想保留用户。
谢谢!
【问题讨论】:
-
是的,您可以在用户集合中唯一的电子邮件,但不能在其他集合中使用
-
@NuOne 但是 author.email 上的索引来自哪里?