使用mongodb csharp索引提示

使用mongodb csharp索引提示,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我正在从mongodb csharp驱动程序1.10.0迁移到2.0.0。 我使用的其中一个集合非常大,必须使用不同的过滤器属性来完成许多查询。这就是为什么我依赖于一些索引提示语句。对于v1.10驱动程序,它看起来像 myCollection.Find(query).SetHint("myIndexName"); 我搜索了v2驱动程序api,但是这个提示方法似乎在v2驱动程序中被完全删除了。还有别的选择吗?如何使用v2驱动程序进行索引提示 注意:提供的解决方案也适用于最新

我正在从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();
我可以问一下你为什么用这个暗示吗?服务器是否始终选择了错误的索引?除非在特殊情况下,否则不需要这样做


Craig

理想情况下,尝试以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 BsonString=新的BsonString(“myIndexName”);
cursor=wait collection.FindAsync(y=>y.Population>400000000,
新的FindOptions()
{
BatchSize=200,
NoCursorTimeout=true,
AllowPartialResults=真,
Projection=“{u id':1,'Name':1,'Population':1}”
提示=bsonString.AsBsonValue,
}).配置等待(错误);

您可以在
MongoDB.Bson

中罚款
BsonString
课程,谢谢!这起作用了。是的,我们经历过执行计划不是最优的(不记得是否一致或只是有时),这导致了错误的响应时间。我们这里还有一位mongodb顾问。(windows上的mongodb 2.6)对我来说,mongodb 3.2在字段排序时没有选择正确的索引。基本上只有一个专门的索引,但是
explain
甚至没有提到它。暗示起作用了。