MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Compare os elementos da matriz, remova aquele com a pontuação mais baixa


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"] } } } )