Ich denke, diese Frage qualifiziert sich als ein Einstieg Clojure Problem. Ich habe grundsätzlich Probleme, eine Clojure Map mehrfach zu bearbeiten und verschiedene Arten von Daten zu extrahieren.Clojure: Aggregieren und Zählen in Karten
eine Karte wie diese gegeben, ich versuche Einträge auf mehrere verschachtelte Schlüssel basiert zu zählen:
[
{
"a": "X",
"b": "M",
"c": 188
},
{
"a": "Y",
"b": "M",
"c": 165
},
{
"a": "Y",
"b": "M",
"c": 313
},
{
"a": "Y",
"b": "P",
"c": 188
}
]
Zuerst möchte ich die Einträge von den a-Schlüsselwerte zur Gruppe:
{
"X" : [
{
"b": "M",
"c": 188
}
],
"Y" : [
{
"b": "M",
"c": 165
},
{
"b": "M",
"c": 313
},
{
"b": "P",
"c": 188
}
]
}
Zweitens möchte ich Werte von b-Tasten als Duplikate zu übernehmen und die verbleibenden Schlüssel ignorieren:
{
"X" : [
{
"b": "M"
}
],
"Y" : [
{
"b": "M"
}
{
"b": "P"
}
]
}
Dann einfach c ount alle Instanzen der b-Taste:
{
"X" : 1,
"Y" : 2
}
Als ich die Daten durch Monger bekommen, ich definiert:
(defn db-query
([coll-name]
(with-open [conn (mg/connect)]
(doall (mc/find-maps (mg/get-db conn db-name) coll-name))))
und dann schlagen die Straßensperre:
(defn get-sums [request]
(->> (db-query "data")
(group-by :a)
(into {})
keys))
Wie Könnte ich von hier weitermachen?
Das funktioniert. Wie großartig. Können Sie erklären, wie das 'fn' für den' b'-Teil alle 'b'-Tasten aggregiert? Es ist komisch, weil der erste Schritt die Verwendung von group-by ist, und dann wird es im zweiten Schritt nicht verwendet, aber es muss auch irgendwie gruppiert werden. – frhd