Isso pode ser feito em algumas etapas. O primeiro passo é obter uma lista dos documentos com a pontuação mínima usando a estrutura de agregação com
$match
, $unwind
e $group
operadores que agilizam seus documentos para encontrar a pontuação mínima para cada documento:lowest_scores_docs = db.school.aggregate([
{ "$match": {"scores.type": "homework"} },
{ "$unwind": "$scores" }, { "$match": {"scores.type": "homework"} },
{ "$group": { "_id":"$_id", "lowest_score": {"$min": "$scores.score" } } } ] )
A segunda etapa é percorrer o dicionário acima e usar o
$pull
operador na consulta de atualização para remover o elemento da matriz da seguinte forma:for result in lowest_scores_docs["result"]:
db.school.update({ "_id": result["_id"] },
{ "$pull": { "scores": { "score": result["lowest_score"] } } } )