2016-08-14 3 views
0

は、次のコードを考えてみましょう:MongoDBでcollection.Aggregate.Project()を使用するには?

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

私は上記のクエリにプロジェクトを()を呼び出す必要があります。 Project()が必要とするタイプProjectionDefinition<T1, T2>の投影定義を構築する方法を理解できませんでした。

ビルダークラスは、この場合には動作していないよう:

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(); 

これは、一つの結果を結合配置するように整合されなければならないフィールド、どこかを示すためにラムダを使用することを可能にする:凝集がルックアップ()の異なるオーバーロードを使用して同時に検索と投影を行うことができます上記の例のOwnerUsers)。 AggregatedEventはEventを拡張し、OwnerUsersという配列フィールドを含みます。これはマッチが置かれる場所です。

関連する問題