MongoDB, Удалить массивы c # - PullRequest
       4

MongoDB, Удалить массивы c #

0 голосов
/ 25 августа 2018

У меня есть эта модель

    { "_id" : 133,
 "name" : "Gisela Levin",
"scores" : [ { "type" : "exam", "score" : 15.88727528055548 }, 
             { "type" : "quiz", "score" : 91.49884857295594 }, 
             { "type" : "homework", "score" : 16.56032169309347 },
             { "type" : "homework", "score" : 1.704262924559419 } ] }

я хочу удалить меньшее домашнее задание, подобное этому

{ "_id" : 133,
 "name" : "Gisela Levin",
"scores" : [ { "type" : "exam", "score" : 15.88727528055548 }, 
             { "type" : "quiz", "score" : 91.49884857295594 }, 
             { "type" : "homework", "score" : 16.56032169309347 } ] }

это мой класс

class students2 {
            public int id { get; set; }
            public string name { get; set; }
             public scorest[] scores { get; set; }

        }


 public class scorest
    {
        public string type { get; set; }
        public double score { get; set; }            
    }

это моя идея

поиск во всех массивах, а затем удалить самый низкий, но показать только один массив по ученику

var query = await col.Find(x => x.name == "Gisela Levin").Project(Builders<students2>.Projection.Include(x => x.name).ElemMatch(x => x.scores, y => y.type == "homework")).ToListAsync();

1 Ответ

0 голосов
/ 25 августа 2018

Если вы имеете в виду, что прочитали данные в переменные c # и хотите отфильтровать данные, вы можете использовать linq следующим образом;

public static students2 FilterStudentScores()
    {
        var student = new students2
        {
            id = 133,
            name = "Gisela Levin",
            scores = new scorest[] { new scorest { type = "exam", score= 15.88727528055548 },
         new scorest{ type= "quiz", score= 91.49884857295594 },
         new scorest{ type= "homework", score= 16.56032169309347 },
         new scorest{ type= "homework", score= 1.704262924559419 }  }
        };

        double maxScore = student.scores.Where(s => s.type.Equals("homework")).Max(s => s.score);
        scorest[] filteredscores = student.scores.Where(s => !s.type.Equals("homework") || (s.type.Equals("homework") && s.score == maxScore)).ToArray();

        students2 filteredStudent = new students2
        {
            id = 133,
            name = "Gisela Levin",
            scores = filteredscores
        };
        return filteredStudent;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...