Совместимость API MongoDB (устарела или актуальна) и проблема GroupBy - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужно решить проблему с производительностью программного обеспечения, используя версию драйвера C # 2.7 для MongoDB (последняя версия).

Проблема связана с использованием устаревшего вызова API:

    _client = new MongoClient( address );
    _server = _client.GetServer(); // This is deprecated
    _database = _server.GetDatabase( dbName ); // This is a MongoDatabase

, что приводит к:

    var collection = database.GetCollection<T>( collectionName ); // This is MongoCollection<T>

Новый API выглядит следующим образом:

    var database = _client.GetDatabase( dbName ); // This is IMongoDatabase
    var collection = database.GetCollection<T>( collectionName ); // This is IMongoCollection<T>

Конкретное следствие (возможно, одно из них) состоит в том, что в устаревшем контексте доступ к collection.AsQueryable() приводит к исключению при использовании для него предложений GroupBy («GroupBy не поддерживается»).Это, конечно, не относится к текущей версии.

Из этого может показаться, что это легко исправить, просто изменив способ получения объекта базы данных.

Но MongoCollection и IMongoCollection этого не делают.Предложите те же методы интерфейса, и этот пункт оказывает огромное влияние на программное обеспечение, над которым я работаю.И исправить это должным образом не входит в мои задачи сегодня или, по крайней мере, в краткосрочной перспективе.

Итак, я считаю возможным закодировать обходной путь:

Сохранить предыдущий устаревшийdatabase версия и переименуйте ее obsoleteDatabase (доступ к ней инкапсулирован).Затем предоставьте его другим частям кода, которые в нем нуждаются.

Создайте еще один database с использованием текущего API 2.7 и извлеките запрашиваемые экземпляры из коллекций, полученных с помощью этой базы данных.

У меня следующие вопросы:

Какие еще подходы я могу рассмотреть?

Опасно ли использовать эти две версии экземпляра базы данных одновременно?(учитывая, что первый имеет доступ для чтения / записи, а новый останется только для чтения).

Примечание: конечно, все это на короткий срок.И я знаю, что устаревшие вызовы должны быть должным образом обновлены как можно скорее.

...