Учитывая коллекцию
{
"_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);
}