Konvertieren von mongo-array-Objekt mit Schlüssel-Wert-paar
Habe ich ein mongo-Dokument enthält ein array von Strings, und ich brauche, um zu konvertieren, das insbesondere array von strings in ein array-Objekt mit den Schlüssel-Wert-paar. Unten ist meine aktuelle Programm zu.
{
"_id" : ObjectId("57e3720836e36f63695a2ef2"),
"platform" : "A1",
"available" : {
"Community" : {
"attributes" : {
"type" : {
"values" : [
"well-known",
"simple",
"complex"
],
"defaultValue" : "well-known"
},
[......]
}
Aktuellen Abfrage:
templateAttributes.find({platform:"V1"}).map(function(c){
//instantiate a new array
var optionsArray = [];
for (var i=0;i< c['available']['Community']['attributes']['type']['values'].length; i++){
optionsArray[i] = {}; //creates a new object
optionsArray[i].label = c['available']['Community']['attributes']['type']['values'][i];
optionsArray[i].value = c['available']['Community']['attributes']['type']['values'][i];
}
return optionsArray;
})[0];
Ergebnis:
[{label:"well-known", value:"well-known"},
{label:"simple", value:"simple"},
{label:"complex", value:"complex"}]
Ist mein Ansatz, der effizient genug ist, oder gibt es eine Möglichkeit, optimieren Sie die Abfrage, um das gleiche gewünschte Ergebnis?
- Keine spezifischen Gründe, dies zu tun auf mongodb Seite ?
- Nein. Es gibt keinen bestimmten Grund, warum es getan werden muss, um auf die mongo-Seite. Da bin ich mit diesem Meteor, der diese Abfrage ausgeführt wird, im Speicher (mini-mongo).
- Ok. Dann Aggregat ist die Lösung. Nur Bedenken Sie, dass
$unwind
wird multiplizieren Sie das Ergebnis set-Größe array.Länge Zeiten. So verwenden Sie ein$project
vor, nur halten Sie die erforderlichen Felder, vielleicht auch nur "Werte".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht so sicher, was Sie tun möchten-mit dem Ergebnis, wie die Schlüssel und Werte sind genau die gleichen. Dennoch, Sie können die aggregation framework
wo können Sie denormalise der embedded values-array durch die Verwendung der
$entspannen
- Betreiber, flacht es heißt, es erzeugt eine Kopie von jedem Dokument pro array-Eintrag.Nach der Reduktion der Werte-array, können Sie die
$group
Ansammlung Operatoren auf den Werten aggregiert werden. Eine endgültige pipeline der$project
- Betreiber gestalten Sie die Felder aus der vorherigen Gruppierung in das gewünschte format.Diesem Beispiel Folgen zu bekommen, das Konzept:
Da man sich mit Meteor, meteor add
meteorhacks:Aggregat
fügen ordnungsgemäße aggregation-Unterstützung für Meteor, so dass Sie können führen Sie das obige aggregation pipeline auf Ihre Sammlung.Nutzen Sie bitte die aggregation hier.
Ausgabe:
Abfrage -
Er dir genau deine erwartete Antwort.