C#MongoDB索引导致奇怪的重复异常

时间:2015-07-09 17:55:37

标签: c# .net mongodb

我们的索引存在问题。我们的电子邮件有一个索引,但它会抛出这样的错误:

> 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;电子邮件等。

这是一个大学项目,明天我们必须把它转。我们真的遇到了麻烦,非常感谢帮助

1 个答案:

答案 0 :(得分:1)

您不希望自己的电子邮件成为文字索引。文本索引允许您在MongoDB中搜索大量文本,就像您正在通过注释或其他内容进行解析一样。您只需要确保您的电子邮件不重复,因此您应该使用升序或降序索引。

CreateIndexOptions options = new CreateIndexOptions {Unique = true};    
_collection.Indexes.CreateOneAsync(Builders<User>.IndexKeys.Ascending(_ => _.email), options)