这是我的实体:

{
     name: "",
     list: [{
       a: 1,
       b: 1
     }]
}

我想创建两个索引,一个是名字索引,另一个是a和b索引。
示例:尝试插入a=1和b=1两次必须抛出错误。
我的MongoDB驱动程序是2。
我就是这么做的:
    await collection.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Ascending(m => m.Name), new CreateIndexOptions()
    {
        Unique = true,
        Sparse = true
    });

我该如何处理我列表中的两个属性?

最佳答案

从C端,您可以使用IndexKeys.Combine帮助器创建这样的索引:

await coll.Indexes.CreateOneAsync(Builders<MyEntity>.IndexKeys.Combine(
       Builders<MyEntity>.IndexKeys.Ascending("list.a"),
       Builders<MyEntity>.IndexKeys.Ascending("list.b")), new CreateIndexOptions()
        {
            Unique = true,
            Sparse = true
        });

一个奇怪的行为是,约束是not enforced within a single documentSERVER-1068),因为可以这么说,索引不被视为“在”文档中。换句话说,您始终可以插入一个文档list : [ {a:1, b:1}, {a:1, b:1} ],即具有包含副本的列表的文档。这在应用程序方面很容易解决,但最好知道。

10-02 18:06