使用mongodb csharp驱动程序2.0.0进行索引提示

时间:2015-05-07 11:30:29

标签: mongodb mongodb-.net-driver

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

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

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

3 个答案:

答案 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 {..});