2016-04-04 4 views
0

Я пытаюсь отобразить/перечислить данные после использования функции агрегации, но этого не происходит.MongoDB Функция агрегации в C#

Этот код работает абсолютно нормально.

 var connectionstring = "mongodb://localhost:27017"; 
     var client = new MongoClient(connectionstring); 
     var db = client.GetDatabase("school"); 
     var col = db.GetCollection<BsonDocument>("students"); 
     var filter = new BsonDocument("type", "homework"); 
     var filter2 = Builders<BsonDocument>.Filter.Eq("scores.type", "homework"); 

     var myresults = await col.Find(filter2) 
      .Limit(2) 
      .Project("{name:1,scores:1,_id:0}") 
      .Sort("{score:1}") 
      .ToListAsync(); 

     foreach (var result in myresults) 
     { 
      Console.WriteLine(result); 
     } 

Этот код извлекает документ, как это следует, однако, когда я заменить

var myresults = await col.Find(filter2) 
      .Limit(2) 
      .Project("{name:1,scores:1,_id:0}") 
      .Sort("{score:1}") 
      .ToListAsync(); 

с этим

  var myresults = await col.Aggregate() 
      .Unwind("{$scores}") 
      .Group(new BsonDocument { { "_id", "$_id" }, { "lowscore", new BsonDocument("$min", "$scores.score") } }) 
      //.Group("{_id:'$_id',lowscore:{$min:'$scores.score'}}") 
      .ToListAsync(); 

Нет запись не тянет. Я не хочу использовать метод Pipeline. Я просто хочу отобразить результат, полученный через функцию агрегата.

Это мой Монго Query (я хочу того же результата, как это в C#) -

db.students.aggregate([{$sort:{_id:-1}},{$unwind:"$scores"},{$group:{_id:"$_id", lowscore:{"$min":"$scores.score"}}}]) 

ответ

2

Это неверно ... {$scores} даже не действует json. Удалите фигурные скобки и знак доллара из директивы $unwind.

Имя параметра - это поле, поэтому вам необходимо указать имя поля.

+0

Спасибо! Я упустил это! –

0

Try с написанием только $ забить вместо @ scores.score. может быть полезно.

db.students.aggregate([{$sort:{_id:-1}},{$unwind:"$scores"},{$group:{_id:"$_id", lowscore:{"$min":"$score"}}}]) 
+0

Запрос о манго работает нормально. Мне нужна помощь с драйвером C# :) –

0

Строительный конвейер агрегации немного сложный.

Try:

var pipeline = new BsonDocument[] { 
    new BsonDocument{ { "$sort", new BsonDocument("_id", 1) }}, 
    new BsonDocument{{"$unwind", "$scores"}}, 
    new BsonDocument{{"$group", new BsonDocument{ 
       {"_id", "$_id"}, 
       {"lowscore",new BsonDocument{ 
         {"$min","$scores.score"}} 
       }} 
     }} 
}; 

var result = collection.Aggregate<BsonDocument> (pipeline).ToListAsync(); 

Если вы pipeline.ToJson(), вы получите следующие JSON эквивалентной строки, которая является таким же, как из исходного и испытанного запроса MongoShell.

[ 
    { 
     "$sort": { 
      "_id": 1 
     } 
    }, 
    { 
     "$unwind": "$scores" 
    }, 
    { 
     "$group": { 
      "_id": "$_id", 
      "lowscore": { 
       "$min": "$scores.score" 
      } 
     } 
    } 
] 
Смежные вопросы