#c# #.net #mongodb #indexing
#c# #.net #mongodb #индексирование
Вопрос:
Я хочу удалить индекс с помощью драйвера MongoDB .NET (v.2.11). Проблема в том, что я не хочу использовать имя индекса, вместо этого я хотел бы удалить его, как в: https://docs.mongodb.com/manual/tutorial/manage-indexes/Remove Конкретный раздел индекса — предоставление схемы индекса. Как это можно сделать? Теперь с помощью:
MyCollection.Indexes.DropOne("{ _id: 1, somefield: 1 }");
приводит к:
MongoDB.Driver.MongoCommandException: 'Command dropIndexes failed: index not found with name [{ _id: 1, somefield: 1 }].'
Примечание: индекс существует в коллекции.
Комментарии:
1. Я не думаю, что это возможно. Не уверен в точном варианте использования, но вы могли бы перебирать индексы, находить тот, который вам нужен, а затем удалять его по имени?
Ответ №1:
В настоящее время в драйвере C # нет способа удалить индекс на основе его ключей.
Однако вы можете выполнить поиск по индексу и получить имя, а затем удалить индекс следующим образом.
var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<Person>("people");
// Create a index
var keys = Builders<Person>.IndexKeys.Ascending(x => x.Surname);
await collection.Indexes.CreateOneAsync(new CreateIndexModel<Person>(keys));
var cursor = await collection.Indexes.ListAsync();
// Find the index
var indexKeys = BsonDocument.Parse("{ Surname: 1 }");
var indexName = (await cursor.ToListAsync())
.Where(x => x["key"] == indexKeys)
.Select(x => x["name"])
.Single();
// Drop index by name
await collection.Indexes.DropOneAsync(indexName.AsString);
Ответ №2:
Команда dropIndex поддерживает предоставление спецификации индекса. Вы можете вызвать его с помощью помощника вашего драйвера для выполнения произвольных команд, если ваш драйвер не предоставляет помощника dropIndex, который принимает спецификацию индекса.
MyCollection.Индексы.DropOne(«{ _id: 1, somefield: 1 }»);
Вы пытались удалить индекс с именем "{ _id: 1, somefield: 1 }"
. Как минимум, вы должны использовать правильный синтаксис для maps на вашем языке программирования.
Комментарии:
1. Я знаю, что это работает, что драйвер C # работает таким образом, так как я искал какое-то решение 🙂