使用 mongodb csharp 的索引提示

Index hint with mongodb csharp

我正在从 mongodb csharp 驱动程序 1.10.0 迁移到 2.0.0。 我使用的其中一个集合非常大,必须用不同的过滤器属性完成许多查询。这就是为什么我依赖一些索引提示语句。使用 v1.10 驱动程序,它看起来像

 myCollection.Find(query).SetHint("myIndexName");

我搜索了v2驱动api但是这个提示方法似乎在v2驱动中被完全删除了。有其他选择吗?我应该如何使用 v2 驱动程序进行索引提示?

注意:提供的解决方案也适用于最新的 mongodb csharp 驱动程序

您可以使用 FindOptions.Modifiers 属性.

var modifiers = new BsonDocument("$hint", "myIndexName"); 
await myCollection.Find(query, new FindOptions { Modifiers = modifiers }).ToListAsync();

请问您为什么使用提示?服务器是否始终选择错误的索引?除非在特殊情况下,否则您不需要这样做。

克雷格

理想情况下,尝试以 mongodb 优化器可以自动使用索引的方式进行查询。

如果您使用 FindAsync,那么您将有一个名为 Hint 的 属性。像这样使用它:

如果您希望查询强制使用名为“myIndexName”的索引,请像这样使用:.

BsonString bsonString = new BsonString("myIndexName");

cursor = await collection.FindAsync(y => y.Population > 400000000,
new FindOptions<Person, Person>()
{
     BatchSize = 200,
     NoCursorTimeout = true,
     AllowPartialResults = true,
     Projection = "{'_id':1,'Name':1,'Population':1}"
     Hint = bsonString.AsBsonValue,
}).ConfigureAwait(false);

你可以罚款 BsonString class 在 MongoDB.Bson

使用聚合你可以像这样强制索引:

BsonString bsonString = new BsonString("ix_indice");

var query = this.collection.Aggregate(new AggregateOptions() { Hint = bsonString }).Match(new BsonDocument {..});