2016-08-14 2 views
0

Рассмотрим следующий фрагмент кода:Как использовать collection.Aggregate.Project() в MongoDB?

var results = collection.Aggregate() 
... 
.Lookup(...) 
.Project(???); 

Мне нужно позвонить Project() на приведенном выше запросе. Мне не удалось выяснить, как построить проекционное определение типа ProjectionDefinition<T1, T2>, что и требуется Project().

Класс Строители, кажется, не работает в этом случае:

var projection = Builders<Event>.Projection.Include(x => x).Include("agg_res.SomeField"); 

как это конкретизирует определение типа ProjectionDefinition<T>.

ответ

0

Я нашел ответ. Агрегации можно выполнить поиск и проекцию в то же время, используя различные перегрузки Lookup():

var results = collection.Aggregate() 
      .Match(filter) 
      .Lookup<Event, User, AggregatedEvent>(users, e => e.OwnerId, u => u.Id, r => r.OwnerUsers) 
      .ToList(); 

Это позволяет использовать лямбды, чтобы указать, какие поля должны быть согласованы и где разместить объединение результатов (OwnerUsers в приведенном выше примере). Обратите внимание, что AggregatedEvent расширяет Event и включает в себя поле массива, называемое OwnerUsers. Здесь размещаются совпадения.

Смежные вопросы