MongoDB C#驱动程序:如何确保对数组内容使用LINQ表达式的索引
本文关键字:数组 LINQ 索引 表达式 驱动程序 何确保 确保 MongoDB | 更新日期: 2023-09-27 18:30:06
如何确保使用LINQ表达式对使用MongoDB C#驱动程序的数组内容进行索引?
我目前有一个域对象,大致如下:
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));
当查找成员[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));
我最终使用了以下内容:
await collection.Indexes.CreateOneAsync(Builders<Team>.IndexKeys.Ascending($"{nameof(Team.Members)}.{nameof(LazyReference.Id)}"), new CreateIndexOptions() { Unique = false });
这可以防止属性重命名,但仍然不如Linq优雅。上面的代码创建了一个类似{ "Members._id" : 1 }
的索引。