2017-07-23 1 views
0

Die Überschrift beschreibt das Problem gut, denke ich. Ich habe eine Sammlung „Ergebnisse“ mit Runden von Dokumenten genannt:mongoDB - Wie finde und sortiere ich mehrere Felder in mehreren Dokumenten und speichere sie in einem einzigen Array?

{ 
    "_id" : "item_e4a2086048057ac9", 
    "home" : "FH>87218379012", 
    "username:" : "Jon Doe", 
    "Apps" : { 
     "game" : { 
      "InVals" : { 
       "ET" : { 
        "et1" : 1, 
        "et2" : 88, 
        "et3" : 7, 
        "et4" : 0.68, 
        "et5" : 5253, 
        "et6" : "7233-AL", 
        "et7" : "23-PL", 
        "et8" : "791-GY" 
       } 
      }, 
      "OutVals" : { 
       "ET" : 74.00 
      } 
     } 
    }, 
    "PAT" : 74 
} 

Zweites Dokument:

{ 
    "_id" : "item_a90a2086048057ac9", 
    "home" : "FH>87218379012", 
    "username:" : "Jon Doe2", 
    "Apps" : { 
     "game" : { 
      "InVals" : { 
       "ET" : { 
        "et1" : 0, 
        "et2" : 9, 
        "et3" : 96, 
        "et4" : 3218, 
        "et5" : 6, 
        "et6" : "65-AL", 
        "et7" : "265-PL", 
        "et8" : "4-GY" 
       } 
      }, 
      "OutVals" : { 
       "ET" : 4.00 
      } 
     } 
    }, 
    "PAT" : 4 
} 

Und so weiter ... Jetzt muß ich all „PAT“ -Felder in den spezifischen abfragen Dokumente, bei denen das Feld „zu Hause“ ist gleich „FH> 87218379012“, so dass sie als sortieren in absteigender Reihenfolge und speichern sie in einer Variable, die ein Array ist:

var resultsArray = [74, 4....,n]; 

Es wäre auch in Ordnung sein, wenn es eine ist Sol Ich muss jeden "PAT" -Wert in einer einzigen Variablen speichern, sortieren und später in einem Array speichern. Am Ende muss ich nur alle "PAT" -Werte der Dokumente, die "FH> 87218379012" haben, als "Home" in absteigender Reihenfolge in einem Array haben.

Ist das möglich oder muss ich etwas in meiner Sammlung ändern?

+0

Was erwarten Sie eigentlich hier? Das kurze Fragment legt nahe, dass Sie die in "OutVals" vorhandenen Werte jedes Dokuments "sortieren" möchten. Wie können Dokumente? Wo musst du sie "sortieren"? Ist dafür ein "Paging" der Ergebnisse erforderlich oder handelt es sich einfach um eine kleine Datenmenge, in der Sie mit diesen Werten arbeiten möchten? –

+0

Ok, vielleicht sollte ich angeben, was ich machen möchte. Also wird der "PAT" -Wert oder "ET" in OutVals (selbe) in der obigen Struktur in jedem Dokument in der Sammlung "results" gespeichert. Ich muss jedes "PAT" aus jedem Dokument mit "FH> 87218379012" in "home" holen, da ich diese Werte von jedem "Heim" in einem Balkendiagramm in absteigender Reihenfolge visualisieren muss. In diesem Fall beginnend bei 74, als 4, der dritthöchsten usw. Da das Balkendiagramm die Eingabe in dieser Struktur [74, 4 ...] liest, dachte ich darüber nach, die Abfragedaten aus der Datenbank in var resultsArray = [. ..]. – Jaybruh

+0

Speichern wo? Ihr Kommentar unten inspiriert nicht gerade Glauben, dass Sie sogar die Umgebung verstehen, in der die Abfrage ausgeführt werden muss. Alles, was Sie wirklich fragen, ist "ein Wert" aus jedem Dokument zurückgegeben, das ist ziemlich einfach. Mit welcher Bibliothek verbinden Sie sich mit MongoDB? –

Antwort

1

können Sie ein aggregation verwenden Ihre PAT Wert übereinstimmen, sortiert nach dem Feld und fügen Sie die Werte in ein Array ein $group Bühne $push:

db.coll.aggregate([{ 
    $match: { 
     home: "FH>87218379012" 
    } 
}, { 
    $sort: { PAT: -1 } 
}, { 
    $group: { 
     _id: null, 
     result: { 
      $push: "$PAT" 
     } 
    } 
}]) 
+0

Vielen Dank, aber obwohl das ziemlich logisch klingt, erhalte ich die Fehlermeldung 'Uncaught ReferenceError: db ist nicht definiert', wenn ich Ihren Befehl in die Chrome-Browserkonsole einfüge. Ich lese auch die Dokumentation von "aggregat" durch und der Befehl wird wie folgt geschrieben: 'db.results.aggregate'. Weißt du, was ich falsch mache? – Jaybruh

+0

@Jaybruh Was Sie falsch machen, ist * "einfügen in die Chrome-Browser-Konsole" *. Dies ist kein Code, den Sie in einem Browser ausführen. –

Verwandte Themen