MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Vergleichen Sie Array-Elemente, entfernen Sie das Element mit der niedrigsten Punktzahl

Dies kann in ein paar Schritten erfolgen. Der erste Schritt besteht darin, mithilfe des Aggregationsframeworks mit $match , $unwind und $group Operatoren, die Ihre Dokumente optimieren, um die Mindestpunktzahl für jedes Dokument zu ermitteln:

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

Der zweite Schritt besteht darin, das obige Wörterbuch zu durchlaufen und den zu verwenden $pull Operator in der Aktualisierungsabfrage, um das Element wie folgt aus dem Array zu entfernen:

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