MongoDB .NET, как удалить элемент из встроенного массива - PullRequest
0 голосов
/ 25 августа 2018

Учитывая коллекцию

{
    "_id" : 137,
    "name" : "Tamika Schildgen",
    "scores" : [
        {
            "type" : "exam",
            "score" : 4.433956226109692
        },
        {
            "type" : "homework",
            "score" : 65.50313785402548
        },
        {
            "type" : "homework",
            "score" : 89.5950384993947
        }
    ]
};

Как я могу удалить оценку с наименьшим значением показателя score.type = "homeowrk" из массива вложенных результатов в коллекции?Попробовал с приведенным ниже кодом, но не повезло, не смог найти, где идет не так.

var col = db.GetCollection<BsonDocument>("students");
            var pipeline = new BsonDocument[] {
                           new BsonDocument{{"$unwind", "$scores"}},
                           new BsonDocument{ {"$match",new BsonDocument { { 
    "scores.type", "homework" } } } },
                           new BsonDocument{{"$group", new BsonDocument{
                                            {"_id", "$_id"},
                                            {"lowscore",new BsonDocument{
                                            {"$min","$scores.score"}}
                            }}
                        }}
                      };
var result = await col.Aggregate<BsonDocument>(pipeline).ToListAsync();

Здесь я получаю правильные результаты, низкая оценка типа домашней работы, но приведенное ниже обновление не удаляет элемент из коллекции, и я не могу понять это.

foreach (var doc in result)
{

    var filterS = new BsonDocument("_id", doc.GetElement("_id").Value.ToInt32());
    var update = Builders<BsonDocument>.Update.PullFilter("scores",
        Builders<BsonDocument>.Filter.Eq("scores.score", doc.GetElement("lowscore").Value.ToDecimal128()));
    var mresult = col.FindOneAndUpdateAsync(filterS, update).Result;
    Console.WriteLine(mresult);

} 
...