3

如何使用 MongoDB C# 驱动程序确保对数组内容使用 LINQ 表达式的索引?

我目前有一个大致如下所示的域对象:

public class Team
{
    public Team()
    {
        Members = new List<LazyReference>();
    }

    public MongoDB.Bson.ObjectId Id { get; set; }
    public string DisplayName { get; set; }
    public LazyReference Leader { get; set; }
    public List<LazyReference> Members { get; private set; }
}

public class LazyReference
{
    public MongoDB.Bson.ObjectId Id { get; set; }
}

在我的收藏中,我初始化了几个这样的索引:

collection.EnsureIndex(IndexKeys<Team>.Ascending(t => t.DisplayName), IndexOptions.SetUnique(true));
collection.EnsureIndex(IndexKeys<Team>.Ascending(t => t.Leader.Id), IndexOptions.SetUnique(false));

在通过 Members[n].Id(其中 n 是任何成员)查找时,如何确保快速索引成员?我知道我可以按如下方式创建索引,但由于它不使用 LINQ 表达式,因此将来重命名属性是不安全的。

collection.EnsureIndex(new IndexKeysBuilder().Ascending("Members._id"), IndexOptions.SetUnique(false));

我也尝试了以下方法,但它只索引指定的索引:

collection.EnsureIndex(IndexKeys<Team>.Ascending(t => t.Members[0].Id), IndexOptions.SetUnique(false));
4

1 回答 1

0

我最终使用了以下内容:

await collection.Indexes.CreateOneAsync(Builders<Team>.IndexKeys.Ascending($"{nameof(Team.Members)}.{nameof(LazyReference.Id)}"), new CreateIndexOptions() { Unique = false });

这可以防止属性重命名,但仍不如 Linq 优雅。上面的代码创建了一个类似的索引{ "Members._id" : 1 }

于 2016-12-29T00:05:18.367 回答