MongoDb С# драйвер LINQ vs Собственный запрос - программирование

MongoDb С# драйвер LINQ vs Собственный запрос

Какой из этих запросов более эффективен с точки зрения производительности, один использует linq, а другой использует встроенный механизм запросов

LINQ

var query =
collection.AsQueryable<Employee>()
.Where(e => e.FirstName == "John")
.Select(e => e); 


NATIVE

var query= Query<Employee>.EQ(e => e.FirstName, "John");
var emp = collection.FindOne(query);

Я предполагаю, что собственный механизм запросов в mongoDb будет лучше, поскольку, насколько я понимаю, он отфильтровывает результат в базе данных, где, когда linq сначала получает все элементы в коллекции, а затем фильтрует результат. Когда следует рассмотреть возможность использования LINQ над встроенным механизмом запросов?

4b9b3361

Ответ 1

поскольку, насколько я понимаю, он отфильтровывает результат в где linq сначала получает все предметы в коллекции и затем фильтрует результат

Нет, нет и нет. Он фильтрует все на уровне базы данных.

Второй вариант не является родным способом построения запроса mongodb. По-прежнему одна и та же оболочка просто создает реальный собственный запрос mongod (например {"a": 1, "b": 2 }).

Первый запрос использует деревья выражений для построения запроса mongo. Во-вторых, используйте рефлексию для построения того же запроса. Как я знаю, деревья выражений должны быть быстрее (здесь в первой статье, которую я нашел). Во всяком случае, я не думаю, что разница в производительности важна. Так что просто используйте то, что вам больше нравится.

Что касается меня, я использую linq для большинства запросов, и некоторые разработчики даже не знают много о монго, но черная сторона здесь заключается в том, что вы действительно можете не понимать, какой запрос он может построить для вас. (например, такая же ситуация с linq для sql). Но вы все равно можете регистрировать все собственные запросы, просматривать их и находить места для оптимизации, изменения. Для сложных запросов я обычно использую второй подход.