我们的索引存在问题。我们的电子邮件有一个索引,但它会抛出这样的错误:
> db.User.insert({email: "hell33o@gmail.com", "_id" : BinData(3,"iKyq6FvBCdd54TdxxX0JhA==")})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error index: placetobe.User.$email_text dup key: { : \"com\", : 0.6666666666666666 }"
}
})
当我们使用我们的C#驱动程序创建索引时,就像这样
由C#创建:
CreateIndexOptions options = new CreateIndexOptions {Unique = true};
_collection.Indexes.CreateOneAsync(Builders<User>.IndexKeys.Text(_ => _.email), options);
导致
{
"v" : 1,
"unique" : true,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "email_text",
"ns" : "placetobe.User",
"weights" : {
"email" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}
但如果我们使用像这样的MongoDB控制台创建它,它可以工作:
{
"v" : 1,
"unique" : true,
"key" : {
"email" : 1
},
"name" : "email_1",
"ns" : "placetobe.User"
}
我不了解两个索引之间的区别,但它们对我们的数据库有影响。我们也遇到了一个保存名字的Collectin问题。我们在&#34;莫莉&#34;如果我们试图插入&#34; Molli&#34;。每当我们有两个&#34; gmail&#34;时,电子邮件似乎就会给我们带来错误。收集的电子邮件或两个&#34; .com&#34;电子邮件等。
这是一个大学项目,明天我们必须把它转。我们真的遇到了麻烦,非常感谢帮助
答案 0 :(得分:1)
您不希望自己的电子邮件成为文字索引。文本索引允许您在MongoDB中搜索大量文本,就像您正在通过注释或其他内容进行解析一样。您只需要确保您的电子邮件不重复,因此您应该使用升序或降序索引。
CreateIndexOptions options = new CreateIndexOptions {Unique = true};
_collection.Indexes.CreateOneAsync(Builders<User>.IndexKeys.Ascending(_ => _.email), options)