Anzahl der Felder in einer MongoDB Collection
Habe ich eine Sammlung von Dokumenten wie diesem:
{
"_id" : ObjectId("..."),
"field1": "some string",
"field2": "another string",
"field3": 123
}
Ich würde gerne in der Lage, die Iteration über die gesamte Kollektion, und die gesamte Anzahl der Felder, die es gibt. In diesem Beispiel-Dokument gibt es 3 (ich will nicht zählen _id), aber es erstreckt sich von 2 bis 50 Felder in einem Dokument. Letztlich, ich bin gerade auf der Suche nach der durchschnittlichen Anzahl der Felder pro Dokument.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun können Sie nutzen aggregation Betreiber $objectToArray (SERVER-23310) zum drehen von Schlüsseln in Werte und zählen. Dieser operator ist in MongoDB v3.4.4+
Beispiel:
Erste Stufe
$project
ist, schalten Sie alle Tasten in ein array um die Anzahl der Felder. Zweite Stufe$group
ist die Summe der Anzahl der Tasten/Felder in der Sammlung, auch die Anzahl von Dokumenten verarbeitet. Dritte Stufe$project
ist die Subtraktion von der Gesamtzahl der Felder mit der Anzahl der Dokumente (die Sie nicht zählen möchten, die für_id
).Können Sie ganz einfach $avg zählen Durchschnitt auf die Letzte Etappe.
Dies ist die am meisten einfache Weise konnte ich herausfinden, wie dies zu tun. Auf wirklich große Datenmengen, die es wohl Sinn macht zu gehen, die Map-reduce " - Pfad. Aber, während Ihr set ist klein genug, dies tun werde.
Dies ist
O(n^2)
, aber ich bin nicht sicher, dass es einen besseren Weg gibt.Könnte man erstellen Sie eine Map-reduce-job. In der Karte Schritt Iteration über die Eigenschaften jedes Dokument als ein javascript-Objekt, Ausgabe der zählen und reduzieren, um die insgesamt.
Können Sie auf einfache Weise finden Sie einfach() den Wert alle und für jeden Datensatz bekommen Größe des Arrays.
HTML:
dann
für jeden Satz von Ergebnis erhalten Sie die Größe des Arrays.
HTML: