C# 如何在不知道索引名称的情况下删除索引?

C# 如何在不知道索引名称的情况下删除索引?,c#,.net,mongodb,indexing,C#,.net,Mongodb,Indexing,我想使用MongoDB.NET驱动程序(v.2.11)删除索引。问题是,我不想使用索引名,而是想删除它,如:删除特定索引部分-提供索引模式。 怎样才能做到呢? 现在使用: MyCollection.index.DropOne({u id:1,somefield:1}) 结果: MongoDB.Driver.MongoCommandException:'Command dropIndexes失败:找不到名为[{u-id:1,somefield:1}]的索引。 注: 集合中存在索引。提供索引规范的支

我想使用MongoDB.NET驱动程序(v.2.11)删除索引。问题是,我不想使用索引名,而是想删除它,如:删除特定索引部分-提供索引模式。 怎样才能做到呢? 现在使用:

MyCollection.index.DropOne({u id:1,somefield:1})

结果:

MongoDB.Driver.MongoCommandException:'Command dropIndexes失败:找不到名为[{u-id:1,somefield:1}]的索引。

注: 集合中存在索引。

提供索引规范的支持。如果驱动程序未提供采用索引规范的dropIndex帮助程序,则可以使用驱动程序的帮助程序调用它以执行任意命令

DropOne({u id:1,somefield:1})


您试图删除名为
“{u id:1,somefield:1}”
的索引。至少您应该在编程语言中为映射使用正确的语法。

目前在C#Driver中没有方法根据其键删除索引

但是,您可以搜索索引并获取名称,然后像下面这样删除索引

var client=newmongoclient();
var database=client.GetDatabase(“测试”);
var collection=database.GetCollection(“人”);
//创建索引
var keys=Builders.IndexKeys.Ascending(x=>x.姓氏);
等待collection.index.CreateOneAsync(新的CreateIndexModel(键));
var cursor=await collection.index.ListAsync();
//查找索引
var indexKeys=BsonDocument.Parse(“{姓氏:1}”);
var indexName=(等待cursor.toListSync())
。其中(x=>x[“键”]==索引键)
.选择(x=>x[“名称”])
.Single();
//按名称删除索引
wait collection.index.DropOneAsync(indexName.AsString);

我认为这是不可能的。不确定确切的用例,但您可以循环索引,找到您要查找的索引,然后按名称删除它?我知道这是可行的,C#driver就是这样工作的,因为我一直在寻找解决方案:)