MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comparez les éléments du tableau, supprimez celui avec le score le plus bas

Cela peut être fait en quelques étapes. La première étape consiste à saisir une liste des documents avec le score minimum en utilisant le cadre d'agrégation avec $match , $unwind et $group opérateurs qui rationalisent vos documents pour trouver le score minimum pour chaque document :

lowest_scores_docs = db.school.aggregate([ 
    { "$match": {"scores.type": "homework"} },
    { "$unwind": "$scores" },  { "$match": {"scores.type": "homework"} },
    { "$group": { "_id":"$_id", "lowest_score": {"$min": "$scores.score" } } } ] )

La deuxième étape consiste à parcourir le dictionnaire ci-dessus et à utiliser le $pull dans la requête de mise à jour pour supprimer l'élément du tableau comme suit :

for result in lowest_scores_docs["result"]:
    db.school.update({ "_id": result["_id"] }, 
        { "$pull": { "scores": { "score": result["lowest_score"] } } } )