我正在从mongodb csharp驱动程序1.10.0迁移到2.0.0。 我正在使用的其中一个集合非常大,必须使用不同的过滤器属性来完成许多查询。这就是我依赖一些索引提示语句的原因。使用v1.10驱动程序,它看起来像
myCollection.Find(query).SetHint("myIndexName");
我搜索了v2驱动程序api但是这个提示方法似乎在v2驱动程序中完全删除了。还有其他选择吗?我该如何使用v2驱动程序进行索引提示?
答案 0 :(得分:7)
您可以使用FindOptions.Modifiers属性。
var modifiers = new BsonDocument("$hint", "myIndexName");
await myCollection.Find(query, new FindOptions { Modifiers = modifiers }).ToListAsync();
我可以问你为什么要使用提示吗?服务器是否一直选择错误的索引?除非在特殊情况下,否则您不应该这样做。
克雷格
答案 1 :(得分:1)
理想情况下,尝试以 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
课上罚款MongoDB.Bson
答案 2 :(得分:0)
使用 agregate,您可以像这样强制索引:
BsonString bsonString = new BsonString("ix_indice");
var query = this.collection.Aggregate(new AggregateOptions() { Hint = bsonString }).Match(new BsonDocument {..});