MongoDB Bson唯一映射器序列化程序

MongoDB Bson唯一映射器序列化程序,mongodb,.net-core,bson,Mongodb,.net Core,Bson,我正在使用mongodb3.6和.NetCore2.0,遵循文档 我想为某些字段添加Bson唯一映射序列化程序。就像在这里: public class UserAccount : Person { [Required] [**i want this to be unique also, like i set it required**] public string Username { get; set; } public string UserCode { g

我正在使用mongodb3.6和.NetCore2.0,遵循文档

我想为某些字段添加Bson唯一映射序列化程序。就像在这里:

public class UserAccount : Person
{
    [Required]
    [**i want this to be unique also, like i set it required**] 
    public string Username { get; set; }
    public string UserCode { get; set; }
}

我在文档中搜索了它,也用谷歌搜索了它,但在C#(关于映射子句)中没有找到任何帮助

自定义序列化程序检查
Required
属性是否已填充,它可以通过检查模型在客户端完成其工作。但是,检查文档属性的值是否唯一需要请求数据库,数据库将搜索具有此类属性值的文档。它将破坏模型序列化的性能,特别是当请求的字段未在MongoDB中建立索引时

这就是为什么我认为不应该在模型序列化期间检查属性唯一性。在文档插入尝试期间,应该在MongoDB服务器端检查它。MongoDB提供了这种开箱即用的功能。您应该做的唯一一件事是在相应的属性上创建唯一索引:

db.userAccounts.createIndex( { "UserName": 1 }, { unique: true } )
现在,如果尝试插入具有重复属性值的文档,将出现以下异常:


您也可以将用户名字段设置为集合中的BsonId。正确,ID定义为唯一的。但是OP可能也需要非id属性的唯一性。我已经有了一个id,所以我需要其他字段是唯一的,并且正在考虑通过注释来实现它。所以,正如我在回答中所示,这是一个坏主意。唯一索引是实现这一点的正确方法。