gpt4 book ai didi

c# - MongoDB C# 驱动程序 : How do I ensure an index using LINQ expressions on the contents of an array?

转载 作者:可可西里 更新时间:2023-11-01 09:55:50 25 4
gpt4 key购买 nike

如何使用 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));

最佳答案

我最终使用了以下内容:

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

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

关于c# - MongoDB C# 驱动程序 : How do I ensure an index using LINQ expressions on the contents of an array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com