使用 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 {..});
我正在从 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 {..});