2014-11-21 13 views
5

Zacząłem od klienta Mongo, wykonując kilka fajnych pytań i agresji .. ale teraz, gdy chcę go użyć w .NET/C#, widzę, że nie mogę po prostu uruchomić zapytania jako pole tekstowe ..Zestaw wyników MongoDB dla Aggregate()

Ponadto po uciekania się do budowania agregacji Pipeline i uruchamiając funkcję collection.Aggregate(), dostaję zestaw wyników, ale nie mam pojęcia jak to przechodzić ..

Czy ktoś może mi w tym pomóc?

Oto mój kod:

var coll = db.GetCollection("animals"); 
var match = new BsonDocument { 
    { "$match", new BsonDocument {{"category","cats"}} } 
}; 

var group = new BsonDocument{ 
    { 
     "$group", new BsonDocument{ 
      {"_id", "$species"}, 
      {"AvgWeight", new BsonDocument{{"$avg", "$weight"}}} } 
    } 
}; 

var sort = new BsonDocument{{"$sort", new BsonDocument{{"AvgWeight", -1}}}}; 
var pipeline = new[] { match, group, sort }; 
var args = new AggregateArgs { Pipeline = pipeline }; 
var res = coll.Aggregate(args); 

foreach (var obj in res) 
{ 
    // WHAT TO DO HERE?? 
} 

Ponadto, należy powiedzieć, że jestem trochę zardzewiały z C#/ASP.NET/MVC więc każdy pokój dla uproszczenia będą mile widziane.

+0

umieścić swój wynik wyjściowy, jeśli jego możliwości – Disposer

Odpowiedz

6

Twój wynik jest niezliczony z BsonDocument, możesz serializować je do obiektów C# za pomocą BSonSerializer. A ten fragment kodu po prostu zapisuje je do konsoli, ale widać, że zostało wpisane przedmiotów

List<Average> returnValue = new List<Average>(); 
returnValue.AddRange(documents.Select(x=> BsonSerializer.Deserialize<Average>(x))); 

foreach (var obj in returnValue) 
{ 
    Console.WriteLine("Species {0}, avg weight: {1}",returnValue._Id,returnValue.AvgWeight); 
} 

a następnie mieć klasę o nazwie średnia, gdzie nazwa właściwości odpowiadają nazwom w BSonDocument, jeśli chcesz zmień nazwę na później (ponieważ _Id nie jest tak miły w terminach C# dotyczących konwencji nazewnictwa), możesz dodać $ BsonDocument projektu do swojego potoku.

public class Average 
{ 
     public string _Id { get; set; } 
     public Double AvgWeight {get; set; } 
} 

próbka $ projekt (dodatek ten w rurociągu przed sort

var project = new BsonDocument 
      { 
       { 
        "$project", 
        new BsonDocument 
         { 
          {"_id", 0}, 
          {"Species","$_id"}, 
          {"AvgWeight", "$AvgWeight"}, 
         } 
       } 
      }; 
Powiązane problemy