MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Confronta gli elementi dell'array, rimuovi quello con il punteggio più basso

Questo può essere fatto in un paio di passaggi. Il primo passo è prendere un elenco dei documenti con il punteggio minimo utilizzando il framework di aggregazione con $match , $unwind e $group operatori che semplificano i tuoi documenti per trovare il punteggio minimo per ogni 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" } } } ] )

Il secondo passaggio è scorrere il dizionario sopra e utilizzare $pull nella query di aggiornamento per rimuovere l'elemento dall'array come segue:

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