2016-04-04 18 views
0

Toplama işlevini kullandıktan sonra verileri görüntülemeye/listelemeye çalışıyorum ancak bu gerçekleşmiyor.MongoDB Toplama işlevi C#

Bu kod kesinlikle düzgün çalışıyor. ben hiçbir kayıt çekilirken bu

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

ile

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

ancak değiştirme zamanını olarak

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

Bu kod belgesini getirir. Pipeline yöntemini kullanmak istemiyorum. Sadece toplama fonksiyonu ile elde edilen sonucu göstermek istiyorum.

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

cevap

2

Bu yanlış ... {$scores} bile geçerli bir json değildir. Kıvırcık parantezleri ve dolar işaretini $unwind yönergesinden kaldırın.

Parametre adı alan, bu yüzden bir alan adı belirtmeniz gerekiyor.

+0

Teşekkür ederiz! Onu gözden kaçırdım! –

0

yerine @ scores.score ait puanı sadece $ yazma ile deneyin - Bu benim Mongo Sorgu olduğunu

(C# Bu aynı sonucu istiyorum). yardımcı olabilir.

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

Mongo sorgusu düzgün çalışıyor. C# Driver ile yardıma ihtiyacım var :) –

0

Toplama boru hattı oluşturmak biraz zor.

Dene: Eğer pipeline.ToJson() yaparsanız, orijinal ve test MongoShell sorgu aynıdır JSON eşdeğer dize aşağıdaki alırsınız

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

.

[ 
    { 
     "$sort": { 
      "_id": 1 
     } 
    }, 
    { 
     "$unwind": "$scores" 
    }, 
    { 
     "$group": { 
      "_id": "$_id", 
      "lowscore": { 
       "$min": "$scores.score" 
      } 
     } 
    } 
]