0

複数の MongoDB コレクションからデータを取得するために clojure を使用しています。

(ns mongofetch
  (:require [somnium.congomongo :as m]))

(m/with-mongo (m/make-connection "testdb") (mapv m/fetch coll))

ここで、coll はコレクション名が格納されるベクトルです。これは、複数の MongoDB コレクションからデータをフェッチし、ドキュメントを含むシーケンス (コレクションごとにシーケンスを返す) で構成されるベクトルを返すため、正常に機能しています。しかし、map代わりにmapv(次のコードスニペットのために)を使用しているときにエラーが発生します。

(m/with-mongo (m/make-connection "testdb") (map m/fetch coll))

エラーは -java.lang.AssertionError: Assert failed: (connection? conn)

AssertionError をスローするのはなぜmapですか? のみを使用して解決するにはどうすればよいですか?

4

1 に答える 1

1

mapは怠惰であり、一般に副作用のある関数には使用しないでください。mapの処理が完了する前に接続が閉じられました。本当に使用したい場合は、 でラップする必要がありますdoall

(doall (map side-effect! coll))
于 2015-10-27T08:52:21.830 に答える