sql >> Databasteknik >  >> NoSQL >> MongoDB

Jämför arrayelement, ta bort den med lägst poäng

Detta kan göras i ett par steg. Det första steget är att ta en lista över dokumenten med lägsta poäng genom att använda aggregeringsramverket med $match , $unwind och $group operatörer som effektiviserar dina dokument för att hitta lägsta poäng för varje dokument:

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

Det andra steget är att gå igenom ordboken ovan och använda $pull operatorn i uppdateringsfrågan för att ta bort elementet från arrayen enligt följande:

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


  1. Aggregera MongoDB-resultat efter ObjectId-datum

  2. MongoDB:försämrad frågeprestanda

  3. Har MongoDB ett inbyggt REST-gränssnitt?

  4. nodejs - mongodb native hitta alla dokument