この質問は、初心者レベルの clojure の問題に該当すると思います。基本的に、clojure マップを複数回処理し、さまざまな種類のデータを抽出するのに問題があります。
このようなマップを考えると、複数のネストされたキーに基づいてエントリをカウントしようとしています:
[
{
"a": "X",
"b": "M",
"c": 188
},
{
"a": "Y",
"b": "M",
"c": 165
},
{
"a": "Y",
"b": "M",
"c": 313
},
{
"a": "Y",
"b": "P",
"c": 188
}
]
まず、エントリを a-key 値でグループ化します。
{
"X" : [
{
"b": "M",
"c": 188
}
],
"Y" : [
{
"b": "M",
"c": 165
},
{
"b": "M",
"c": 313
},
{
"b": "P",
"c": 188
}
]
}
次に、b キーの値を重複として想定し、残りのキーを無視します。
{
"X" : [
{
"b": "M"
}
],
"Y" : [
{
"b": "M"
}
{
"b": "P"
}
]
}
次に、単純に b キーのすべてのインスタンスを数えます。
{
"X" : 1,
"Y" : 2
}
モンガーを介してデータを取得しているので、次のように定義しました。
(defn db-query
([coll-name]
(with-open [conn (mg/connect)]
(doall (mc/find-maps (mg/get-db conn db-name) coll-name))))
そして障害物にぶつかる:
(defn get-sums [request]
(->> (db-query "data")
(group-by :a)
(into {})
keys))
どうすればここから続けることができますか?