Mongodb-Java: entfernen Sie ein element eines embedded-array innerhalb eines Dokuments auf der Grundlage bestimmter Zustand der Elemente

Habe ich eine Liste der Schüler Dokumente, die die Struktur wie dieser:

{
    "_id" : 0,
    "name" : "aimee Zank",
    "scores" : [
            {
                    "type" : "exam",
                    "score" : 1.463179736705023
            },
            {
                    "type" : "quiz",
                    "score" : 11.78273309957772
            },
            {
                    "type" : "homework",
                    "score" : 6.676176060654615
            },
            {
                    "type" : "homework",
                    "score" : 35.8740349954354
            }
    ]
}

Wie Sie sehen können, jeder Schüler hat eine Liste von 4 erzielt.
Ich muss entfernen Sie die untersten "Hausaufgaben" und eine Punktzahl für jeden Schüler dokumentieren. Jeder Schüler hat 2 Einträge für "homewok" - Typ-erzielt (die letzten 2 Einträge in dem array von 4 Elementen). Das schema und die Reihenfolge der score-Typ ist konsequent und hat das gleiche Muster für alle Schüler
Ihre Hilfe wird sehr geschätzt.

Dies ist, was ich versucht habe zu erreichen so weit:

    DBCursor cursor = collection.find();

    try {

        while(cursor.hasNext()) {
           BasicDBObject doc = (BasicDBObject) cursor.next();
           BasicDBList scoreList =  (BasicDBList) doc.get("scores");

           BasicDBObject hw1 = (BasicDBObject) scoreList.get("2");
           double hw1Score = hw1.getDouble("score");

           BasicDBObject hw2 = (BasicDBObject) scoreList.get("3");
           double hw2Score = hw2.getDouble("score");

           if (hw1Score > hw2Score) {
               BasicDBObject update = new BasicDBObject("scores.score", hw2Score);               
               collection.update(doc, new BasicDBObject("$pull",update));                                                  
           } else {
               BasicDBObject update = new BasicDBObject("scores.score", hw1Score);

               collection.update(doc, new BasicDBObject("$pull",update));                                  
           }
           System.out.println(doc);
        }

    } finally {
       cursor.close();
    }


}
  • Haben Sie versucht alles, um dies zu erreichen? Wenn ja, bitte teilen
  • Wahrscheinlich nicht, denn es ist eine bekannte Hausaufgaben-Frage, entlehnt aus university.mongodb.com
  • Haben Sie versucht, zu suchen für die niedrigste Punktzahl und $pull es?
  • Sorry, ich sehe nicht, was deine Frage ist. Bitte nicht nur Fragen, "Wie mache ich es?"
  • Ich finde nicht die java-Beispiel für das entfernen eines element von einem array basiert auf bestimmten Voraussetzungen der array-Elemente
  • Könnt Ihr kommentieren, wenn die Lösung, die ich gab, macht Sinn oder nicht und wenn Sie denken, es könnte besser optimiert. Danke, weiß es zu schätzen.

InformationsquelleAutor Paaji | 2015-01-21
Schreibe einen Kommentar