sql >> Base de Datos >  >> NoSQL >> MongoDB

Compare los elementos de la matriz, elimine el que tenga la puntuación más baja

Esto se puede hacer en un par de pasos. El primer paso es obtener una lista de los documentos con la puntuación mínima mediante el marco de agregación con $match , $unwind y $group operadores que agiliza sus documentos para encontrar la puntuación 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" } } } ] )

El segundo paso es recorrer el diccionario anterior y usar $pull operador en la consulta de actualización para eliminar el elemento de la matriz de la siguiente manera:

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