Я использую mongodb и драйвер c#, я сделал несколько запросов для разных частей моего приложения. Для разных коллекций я создал соответствующие индексы для поддержки своих запросов, или, я надеюсь, что это так.
Я хочу проверить поведение своих запросов, чтобы убедиться, что запросы действительно используют индексы. Для этого я думаю создать автоматические тесты, которые могут выполнять объяснение запросов и затем проверять используемые стратегии.
Однако мне очень трудно понять, как это сделать с C# Водитель. Пример моих запросов выглядит следующим образом:
IMongoCollection<UserData> collection = ...
FilterDefinition<UserData> filter = Builders<UserData>.Filter.In(x => x.Email, emails);
ProjectionDefinition<UserData> projection = Builders<UserData>.Projection
.Include(x => x.UserId)
.Include(x => x.Email);
FindOptions<UserData> options = new FindOptions<UserData> { Projection = projection };
IAsyncCursor<UserData> findCursor = await collection.FindAsync(filter, options);
Из документации c# драйвера, Я нашел это (MongoCursor.Explain
), и это то, на что я надеялся , Тем не менее, я понятия не имею, как я получаю MongoCursor
. Я также нашел здесь класс ExplainOperation
, но, похоже, я не могу найти ни одного примера его использования.
В настоящее время у меня работает следующее:
FindOptions findOptions = new FindOptions { Modifiers = new BsonDocument("$explain", true) };
BsonDocument document = collection.Find(filter, findOptions).Project(projection).First();
Тем не менее, поле Modifiers
устарело, что говорит мне: «Вместо этого используйте отдельные свойства.», Но я не могу найти какие-либо свойства объяснения где-либо.
Итак что я мог / должен сделать? Причина, по которой это делается как автоматическое тестирование, заключается в том, что я хочу защититься от изменений в индексах или запросах без необходимости вручную проверять его в оболочке mon go, но это необоснованная или плохая практика для проверки использование индексов с помощью автотестов? Какие есть альтернативы?