2016-08-14 66 views
0

考慮下面的代碼:如何在MongoDB中使用collection.Aggregate.Project()?

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

我需要調用項目()上述查詢。我一直無法弄清楚如何構建ProjectionDefinition<T1, T2>類型的投影定義,這是Project()所要求的。

建築工地類似乎並沒有在這種情況下工作:

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

,因爲它實例ProjectionDefinition<T>類型的定義。

回答

0

我找到了答案。聚合可以通過使用查找()的一個不同的過載進行在同一時間的查找和投影:

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

這允許人們使用lambda表達式來指示哪個字段應該被匹配,並且其中放置連接結果(上例中的OwnerUsers)。請注意,AggregatedEvent擴展了Event,幷包含一個名爲OwnerUsers的數組字段。這是比賽的地方。