2016-07-20 7 views
0

Ich bin ziemlich neu in der Mongo-Welt. Ich versuche, eine Aggregatfunktion in C# mit Pipeline-Ansatz auszuführen. Verwendete MongoDB-Version: 3.2. C# Treiber Version: 2.2.4 für beide mongoC# und mongoDB TreiberVerwenden Aggregate <> Funktion in IMongoCollection und wie es anders ist .Aggregate() in MongoCollection

C# Hier ist der Code

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

Interaktion Klasse ist einfach Getter und Setter-Klasse, Code ist wie folgt:

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;}     
     } 
} 

So 2 kurze Fragen:

  1. Wie genau Aggre zu verwenden Gate-Funktion im obigen Szenario. Bitte führe mich, wenn ich etwas falsch mache.

  2. Was sind diese 2 separate Sammlung MongoCollection und IMongoCollections und wann was zu verwenden.

Bitte helfen Sie mir dabei. Vielen Dank im Voraus

+0

Kann jemand bitte diese newb helfen :( – user5510044

+0

die entsprechenden Links Nach dem Surfen ich denke .Aggregate() Funktion ist wahrscheinlich veraltet in der neuesten Mongo-Version, ich verwende 3.2. Auch viel Hilfe ist nicht online verfügbar – user5510044

+0

fügen Sie Ihre C# -Klasse, Treiberversion zur Verfügung stellen – profesor79

Antwort

0

Sind Sie sicher, dass es dort <> gibt? Ich kann keine Dokumentation finden, die es anweist.

Auch <T> ist in der Regel „Template“ für die Klassen zu verweisen, sehen List<MyCustomClass> und ich habe es nie leer gesehen vor

verwendet
+0

Ich sage nicht zu halten <> leer. Ich habe gerade darüber geschrieben, was Intellisense in VS gezeigt hat und ich bin mir nicht sicher, wie ich es benutzen soll. – user5510044

+0

möchten Sie wahrscheinlich den <> überspringen. – Dagurdan

+0

Entschuldigung, aber ich habe nicht bekommen, was Sie hier vorschlagen. Kannst du bitte Erklären? – user5510044