【发布时间】:2019-02-25 19:06:57
【问题描述】:
我创建了一个 mongodb 集合并想在其中将“电子邮件”字段标记为唯一,所以我这样做了(这是一个 Java 代码,尽管语言在这里实际上并不重要):
IndexOptions indexOptions = new IndexOptions();
indexOptions.unique(true);
userCollection.createIndex(Indexes.text("email"), indexOptions);
然后我尝试像这样插入 2 个文档:
Document doc = new Document();
doc.append("email", "johnny@gmail.com");
doc.append("username", "John");
doc.append("lastname", "Doe");
userCollection.insertOne(document);
Document doc = new Document();
doc.append("email", "duck@gmail.com");
doc.append("username", "Donald");
doc.append("lastname", "Duck");
userCollection.insertOne(document);
第一个插入没有任何问题,第二个抛出这个异常:
E11000 重复键错误集合:wagon.w_users 索引: email_text 复制键:{:“com”,:0.6666666666666666 }
如果我将 gmail.com 更改为例如gmail.comm,它会抛出这个异常
E11000 重复键错误收集:wagon.w_users 索引:email_text 复制键:{:“gmail”,:0.6666666666666666}
我看到的解决方法是对用户的电子邮件进行哈希处理并创建一个类似“emailhash”的字段,但它对我来说似乎是一个拐杖。也许我在这里错过了一些重要的设置?我们可以使用电子邮件作为唯一键吗?
【问题讨论】:
标签: mongodb unique-key