2016-12-21 73 views
1

我想使用2.2版本的驅動程序創建一個聚合查詢使用FilterDefintion爲匹配階段和ProjectionDefinition爲組階段。但我不太清楚如何創建ProjectionDefinition。 API如下:使用ProjectionDefinition與C#驅動程序的Mongodb組聚合

FilterDefinition<T> filter=Builders<T>.Filter.Eq("Foo","Bar"); 
ProjectionDefinition<T> projection=... 
IAggregateFluent<T> aggr = fileCol.Aggregate<T>() 
      .Match(filter) 
      .Group(projection); 

匹配過濾器的工作原理與普通的Find類似。但我不知道如何創建投影。

我可以創建一個普通的Bson文檔,並將其放在該階段,它的工作原理。但我試圖使用來自構建器的強類型對象來創建一致的接口,這是我無法弄清楚如何做到這一點的一個地方。我認爲這是可能的,因爲API存在。

(對於小組賽階段的BSON文檔可以等):

projection = new BsonDocument("_id","$SomeIdField"). 
    Add("Result",new BsonDocument("$max","$someNumberField")); 

編輯: MongoDB的API我指的是下面的聯繫,我引用的相關章節。沒有提供任何示例。我同意'GroupDefinition'會更有意義,但我沒有寫:-)通過強類型,我的意思是鍵入任何值的返回值,而不是BsonDocument。

http://api.mongodb.com/csharp/current/html/M_MongoDB_Driver_AggregateFluentBase_1_Group__1.htm

塊引用

public abstract IAggregateFluent<TNewResult> Group<TNewResult>(
    ProjectionDefinition<TResult, TNewResult> group 

參數

類型:MongoDB.Driver.ProjectionDefinition < TResult,TNewResult>

組投影。

類型參數

TNewResult

的類型階段的結果。

塊引用

+0

'ProjectionDefinition'在分組階段?這聽起來不對。它自己就像比賽一樣是一個舞臺。 btw'BsonDocument'是強類型的。如果它只是一個關鍵值對'BsonDocument'是你的對象,我認爲對於累加器操作符,你已經有了可以使用的包裝器。 – Veeram

+0

@SagarReddy,我同意這很讓人困惑,但這是mdb文檔如何擁有它。我已經把問題中的相關部分聯繫起來了。 –

回答

2

上有AggregateGroupTranslatorTests.cs一些很好的例子,這是爲MongoDB .NET Driver: aggregation group測試文件。

舉例來說,如果你有這樣的類定義:

public class ExampleGroup 
{ 
    [BsonId] 
    public ObjectId Id {get;set;} 
    public string SomeStringField { get; set; } 
    public int SomeNumberField {get; set;} 
} 

你想的

{ _id: "$SomeStringField", Result: { "$max": "$SomeNumberField" } } 

進行分組,您可以如下執行:

var result = collection.Aggregate() 
         .Group(
          x => x.SomeStringField, 
          g => new { 
            Result = g.Select(
              x => x.SomeNumberField 
              ).Max() 
          } 
         ).ToList(); 
result.ForEach(doc => Console.WriteLine(doc.ToJson())); 

的上面的代碼片段在.Net 4.5,MongoDB 3.4和MongoDB .Net/C#Driver v2.3上進行了測試。我知道你使用的是v2.2,但是項目定義分組沒有(或任何)更改。

還檢查了其他LINQ翻譯測試MongoDB.Driver.Tests/Linq/Translators

+0

感謝您使用強類型的示例。 –

+0

我錯過了這個問題得到了回答,對於遲到的接受感到抱歉。我不想使用LINQ,但我沒有在原始文章中說過。 –

相關問題