2016-07-20 46 views
0

我對Mongo世界非常陌生。我想在c#中使用管道方法執行聚合函數。 使用的MongoDB版本:3.2。 C#驅動程序版本:2.2.4兩個mongoC#和MongoDB驅動在IMongoCollection中使用Aggregate <>函數以及它與MongoCollection中的.Aggregate()的不同形式

C#下面的代碼

MongoClient client = new MongoClient("mongodb://localhost:27017"); 

IMongoDatabase database = client.GetDatabase("Interaction"); 

IMongoCollection<CollectionStructure.Interactions> collection = database.GetCollection <CollectionStructure.Interactions>("Interactions"); 
//IMongoCollection<CollectionStructure.Interactions> result; 

var unwind = new BsonDocument 
{ 
    { 
     "$unwind", 
     new BsonDocument 
     { 
      {"path", "$Pages" } 
     } 
    } 
}; 

var group1 = new BsonDocument 
{ 
    { 
     "$group", 
     new BsonDocument 
     { 
      { 
       "_id", new BsonDocument 
       { 
        {"UrlPath", "$Pages.Url.Path"}, 
        {"InteractionId", "$_id"} 
       } 
      }, 
      { 
       "count", new BsonDocument 
       { 
        {"$sum", 1} 
       } 
      } 
     } 
    } 

}; 
var group2 = new BsonDocument 
{ 
    { 
     "$group", 
     new BsonDocument 
     { 
      { 
       "_id", new BsonDocument 
       { 
        {"UrlPath", "$_id.UrlPath"} 
       } 
      }, 
      { 
       "distinctCount", new BsonDocument 
       { 
        {"$sum", 1} 
       } 
      } 
     } 
    } 

}; 

var sort = new BsonDocument 
{ 
    { 
     "$sort", 
     new BsonDocument 
     { 
      {"distinctCount", "-1" } 
     } 
    } 
}; 

AggregateArgs pipeline = new AggregateArgs(); //= new[] {unwind,group1,group2,sort}; 
pipeline.Pipeline = new[] { unwind, group1, group2, sort }; 


##error## 
var result = collection.Aggregate<>(pipeline); 

互動類簡單的getter和setter類,代碼如下:

public static class CollectionStructure 
{ 
     [BsonIgnoreExtraElements] 
     public class Interactions 
     { 
      public string id { get; set; } 
      public string contactId{ get; set; } 
      public string channelId { get; set; } 
      public string language { get; set; } 
      public string siteName { get; set; } 
      public int value { get; set; } 
      public int visitPageCount { get; set; } 
      public List<Pages> Pages{get; set;} 
     } 

     public class Pages 
     { 
      public string url {get; set;} 
      public int visitPageIndex {get; set;}     
     } 
} 

所以2個快速問題:

  1. 如何正確使用Aggre上述場景下的門功能。請指導我,如果我做錯了什麼。

  2. 什麼是這兩個單獨的集合MongoCollection和IMongoCollections以及何時使用什麼。

請在這幫我。在此先感謝

+0

是否有人可以幫助這個福利局:( – user5510044

+0

瀏覽相關鏈接,我認爲.Aggregate後()功能很可能在最新的Mongo版本中被棄用,我正在使用3.2。也有很多幫助不在線提供 – user5510044

+0

添加你的c#類,提供驅動版本 – profesor79

回答

0

你確定應該有<>那裏?我找不到任何文件指示它。

而且<T>通常是引用「模板」的班,看到List<MyCustomClass>和我從來沒有見過之前所使用的空

+0

我不是說要保持<>空。我剛纔寫了什麼intellisense在VS中給我看,我不知道如何使用它。 – user5510044

+0

你很可能想跳過<>。 – Dagurdan

+0

抱歉,我沒有得到你在這裏提出的建議。你能解釋一下嗎? – user5510044