korma 関数からの結果セットに対して ETL を実行するために、いくつかのフォームをつなぎ合わせる際に問題が発生しています。
korma sql から戻ります。
({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"})
:a
キーワードが 1である「子」を取得して、この結果セットをフィルタリングしようとしています。
私の試み:
;mock of korma result
(def data '({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"}))
(-> data
first
:children
(filter #(= (% :a) 1)))
ここで期待しているのは、:a が 1 に設定されたハッシュマップのベクトル、つまり:
[{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4}]
ただし、次のエラーが発生します。
IllegalArgumentException Don't know how to create ISeq from: xxx.core$eval3145$fn__3146 clojure.lang.RT.seqFrom (RT.java:505)
私が収集したエラーから、関数からシーケンスを作成しようとしています...ただし、理由についてドットを接続することはできません。
さらに、次のようにしてフィルター関数を完全に分離すると:
(let [children (-> data first :children)]
(filter #(= (% :a) 1) children))
できます。:children
最初のスレッドがフィルタ関数を適用せず、ベクトルを coll 引数として渡さない理由がわかりません。
ありとあらゆる助けが大歓迎です。
ありがとう