Introduce monger.collection/find-seq

For cases when you do not want to work with DBCursors but also
do not need conversion to maps that monger.collection/find-maps does.
This commit is contained in:
Michael S. Klishin 2011-10-08 12:08:26 +04:00
parent db6721ddab
commit 886a270bf9
2 changed files with 46 additions and 25 deletions

View file

@ -63,6 +63,14 @@
([^String collection, ^Map ref, ^List fields]
(map (fn [x] (from-db-object x true)) (seq (find collection ref fields)))))
(defn ^ISeq find-seq
([^String collection]
(seq (find collection)))
([^String collection, ^Map ref]
(seq (find collection ref)))
([^String collection, ^Map ref, ^List fields]
(seq (find collection ref fields))))
;;
;; monger.collection/find-one
;;

View file

@ -94,9 +94,9 @@
(let [collection "things"]
(is (= 0 (mgcol/count collection)))
(mgcol/insert-batch collection [{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }] )
{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }] )
(is (= 4 (mgcol/count collection)))
(is (= 3 (mgcol/count collection { :language "Clojure" })))
(is (= 1 (mgcol/count collection { :language "Scala" })))
@ -106,9 +106,9 @@
(deftest remove-all-documents-from-collection
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(is (= 4 (mgcol/count collection)))
(mgcol/remove collection)
(is (= 0 (mgcol/count collection)))))
@ -117,9 +117,9 @@
(deftest remove-some-documents-from-collection
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(is (= 4 (mgcol/count collection)))
(mgcol/remove collection { :language "Clojure" })
(is (= 1 (mgcol/count collection)))))
@ -135,6 +135,10 @@
cursor (mgcol/find collection)]
(is (empty? (iterator-seq cursor)))))
(deftest find-document-seq-when-collection-is-empty
(let [collection "docs"]
(is (empty? (mgcol/find-seq collection)))))
;;
;; find-one
@ -271,31 +275,40 @@
(deftest find-multiple-documents
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(is (= 1 (monger.core/count (mgcol/find collection { :language "Scala" }))))
(is (= 3 (.count (mgcol/find collection { :language "Clojure" }))))
(is (empty? (mgcol/find collection { :language "Java" })))))
(deftest find-and-iterate-over-multiple-documents-the-hard-way
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(doseq [doc (take 3 (map (fn [dbo]
(monger.conversion/from-db-object dbo true))
(mgcol/find-seq collection { :language "Clojure" })))]
(is (= "Clojure" (:language doc))))))
(deftest find-and-iterate-over-multiple-documents
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(doseq [doc (take 3 (map (fn [dbo]
(monger.conversion/from-db-object dbo true))
(iterator-seq (mgcol/find collection { :language "Clojure" }))))]
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(doseq [doc (take 3 (mgcol/find-maps collection { :language "Clojure" }))]
(is (= "Clojure" (:language doc))))))
(deftest find-multiple-maps
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(is (= 1 (clojure.core/count (mgcol/find-maps collection { :language "Scala" }))))
(is (= 3 (.count (mgcol/find-maps collection { :language "Clojure" }))))
(is (empty? (mgcol/find-maps collection { :language "Java" })))))
@ -305,9 +318,9 @@
(deftest find-multiple-partial-documents
(let [collection "libraries"]
(mgcol/insert-batch collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
{ :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }])
(let [scala-libs (mgcol/find collection { :language "Scala" } [:name])
clojure-libs (mgcol/find collection { :language "Clojure"} [:language])]
(is (= 1 (.count scala-libs)))
@ -435,7 +448,7 @@
(let [collection "widgets"]
(mgcol/drop collection)
(mgcol/insert-batch collection [{ :name "widget1" }
{ :name "widget2" }])
{ :name "widget2" }])
(is (mgcol/exists? collection))
(mgcol/drop collection)
(is (false? (mgcol/exists? collection)))