#c# #mongodb #linq #mongodb-.net-driver
#c# #mongodb #linq #mongodb-.net-driver
Вопрос:
Я относительно новичок в MongoDB и обнаружил, что мне гораздо удобнее писать linq для извлечения данных, но когда я попробовал это:
var fieldList = await collection.AsQueryable<Change>()
.Where(f => f.Area == area amp;amp; f.AreaRecordId == id)
.GroupBy(f => f.Field)
.Select(f => f.OrderByDescending(d => d.DateChange).FirstOrDefault())
.ToListAsync();
Я получил сообщение об ошибке:
Система.Исключение NotSupportedException: FirstOrDefault типа System.Linq .Перечисляемый не поддерживается в дереве выражений { document}.Порядок убывания (d => d.DateChange).FirstOrDefault() .
Я понимаю, что не каждая область linq поддерживается.
В моем MongoDB хранятся документы изменений. Каждое изменение имеет, помимо прочего, область, идентификатор записи области, идентификатор поля и свойство изменения даты. Для области с определенным идентификатором записи я хочу иметь возможность извлекать все изменения полей (т. Е. Группировать по идентификатору поля), но только самые последние.
Есть мысли, как я мог бы это сделать? Я попробовал использовать более родной подход MongoDB, но сразу же застрял.
Комментарии:
1. да, драйвер mongo не очень хорошо справляется со сложными запросами linq. вам следует потратить некоторое время на изучение простых запросов агрегации mongo, если вы хотите делать больше, чем просто базовые вещи, поддерживаемые драйвером, и связать эти запросы агрегации с c # чем-то вроде этого или передать строки json драйверу.