Greatly speed up monger.multi.* tests, esp. with MongoDB 2.6

This commit is contained in:
Michael Klishin 2014-05-09 16:58:33 -04:00
parent 6d3b2be339
commit 373c4db7a4
6 changed files with 173 additions and 152 deletions

View file

@ -6,7 +6,7 @@
[java.util Date]) [java.util Date])
(:require [monger.core :as mg] (:require [monger.core :as mg]
[monger core util] [monger core util]
[monger.multi.collection :as mgcol] [monger.multi.collection :as mc]
[monger.result :as mgres] [monger.result :as mgres]
[monger.test.helper :as helper] [monger.test.helper :as helper]
[clojure.test :refer :all] [clojure.test :refer :all]
@ -15,12 +15,16 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "scores")
(mc/remove db "things")
(mc/remove db "docs")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
;; ;;
;; $inc ;; $inc
@ -30,35 +34,35 @@
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "scores" coll "scores"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :username "l33r0y" :score 100 }) (mc/insert db coll { :_id oid :username "l33r0y" :score 100 })
(mgcol/update db coll { :_id oid } { $inc { :score 20 } }) (mc/update db coll { :_id oid } { $inc { :score 20 } })
(is (= 120 (:score (mgcol/find-map-by-id db coll oid)))))) (is (= 120 (:score (mc/find-map-by-id db coll oid))))))
(deftest set-a-single-non-existing-field-using-$inc-modifier (deftest set-a-single-non-existing-field-using-$inc-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "scores" coll "scores"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :username "l33r0y" }) (mc/insert db coll { :_id oid :username "l33r0y" })
(mgcol/update db coll { :_id oid } { $inc { :score 30 } }) (mc/update db coll { :_id oid } { $inc { :score 30 } })
(is (= 30 (:score (mgcol/find-map-by-id db coll oid)))))) (is (= 30 (:score (mc/find-map-by-id db coll oid))))))
(deftest increment-multiple-existing-fields-using-$inc-modifier (deftest increment-multiple-existing-fields-using-$inc-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "scores" coll "scores"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :username "l33r0y" :score 100 :bonus 0 }) (mc/insert db coll { :_id oid :username "l33r0y" :score 100 :bonus 0 })
(mgcol/update db coll { :_id oid } {$inc { :score 20 :bonus 10 } }) (mc/update db coll { :_id oid } {$inc { :score 20 :bonus 10 } })
(is (= { :_id oid :score 120 :bonus 10 :username "l33r0y" } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :score 120 :bonus 10 :username "l33r0y" } (mc/find-map-by-id db coll oid)))))
(deftest increment-and-set-multiple-existing-fields-using-$inc-modifier (deftest increment-and-set-multiple-existing-fields-using-$inc-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "scores" coll "scores"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :username "l33r0y" :score 100 }) (mc/insert db coll { :_id oid :username "l33r0y" :score 100 })
(mgcol/update db coll { :_id oid } { $inc { :score 20 :bonus 10 } }) (mc/update db coll { :_id oid } { $inc { :score 20 :bonus 10 } })
(is (= { :_id oid :score 120 :bonus 10 :username "l33r0y" } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :score 120 :bonus 10 :username "l33r0y" } (mc/find-map-by-id db coll oid)))))
@ -70,34 +74,34 @@
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "things" coll "things"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :weight 10.0 }) (mc/insert db coll { :_id oid :weight 10.0 })
(mgcol/update db coll { :_id oid } { $set { :weight 20.5 } }) (mc/update db coll { :_id oid } { $set { :weight 20.5 } })
(is (= 20.5 (:weight (mgcol/find-map-by-id db coll oid [:weight])))))) (is (= 20.5 (:weight (mc/find-map-by-id db coll oid [:weight]))))))
(deftest set-a-single-non-existing-field-using-$set-modifier (deftest set-a-single-non-existing-field-using-$set-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "things" coll "things"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :weight 10.0 }) (mc/insert db coll { :_id oid :weight 10.0 })
(mgcol/update db coll { :_id oid } { $set { :height 17.2 } }) (mc/update db coll { :_id oid } { $set { :height 17.2 } })
(is (= 17.2 (:height (mgcol/find-map-by-id db coll oid [:height])))))) (is (= 17.2 (:height (mc/find-map-by-id db coll oid [:height]))))))
(deftest update-multiple-existing-fields-using-$set-modifier (deftest update-multiple-existing-fields-using-$set-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "things" coll "things"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :weight 10.0 :height 15.2 }) (mc/insert db coll { :_id oid :weight 10.0 :height 15.2 })
(mgcol/update db coll { :_id oid } { $set { :weight 20.5 :height 25.6 } }) (mc/update db coll { :_id oid } { $set { :weight 20.5 :height 25.6 } })
(is (= { :_id oid :weight 20.5 :height 25.6 } (mgcol/find-map-by-id db coll oid [:weight :height]))))) (is (= { :_id oid :weight 20.5 :height 25.6 } (mc/find-map-by-id db coll oid [:weight :height])))))
(deftest update-and-set-multiple-fields-using-$set-modifier (deftest update-and-set-multiple-fields-using-$set-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "things" coll "things"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :weight 10.0 }) (mc/insert db coll { :_id oid :weight 10.0 })
(mgcol/update db coll { :_id oid } {$set { :weight 20.5 :height 25.6 } }) (mc/update db coll { :_id oid } {$set { :weight 20.5 :height 25.6 } })
(is (= { :_id oid :weight 20.5 :height 25.6 } (mgcol/find-map-by-id db coll oid [:weight :height]))))) (is (= { :_id oid :weight 20.5 :height 25.6 } (mc/find-map-by-id db coll oid [:weight :height])))))
;; ;;
@ -108,27 +112,27 @@
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :title "Document 1" :published true }) (mc/insert db coll { :_id oid :title "Document 1" :published true })
(mgcol/update db coll { :_id oid } { $unset { :published 1 } }) (mc/update db coll { :_id oid } { $unset { :published 1 } })
(is (= { :_id oid :title "Document 1" } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title "Document 1" } (mc/find-map-by-id db coll oid)))))
(deftest unset-multiple-existing-fields-using-$unset-modifier (deftest unset-multiple-existing-fields-using-$unset-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :title "Document 1" :published true :featured true }) (mc/insert db coll { :_id oid :title "Document 1" :published true :featured true })
(mgcol/update db coll { :_id oid } { $unset { :published 1 :featured true } }) (mc/update db coll { :_id oid } { $unset { :published 1 :featured true } })
(is (= { :_id oid :title "Document 1" } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title "Document 1" } (mc/find-map-by-id db coll oid)))))
(deftest unsetting-an-unexisting-field-using-$unset-modifier-is-not-considered-an-issue (deftest unsetting-an-unexisting-field-using-$unset-modifier-is-not-considered-an-issue
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :title "Document 1" :published true }) (mc/insert db coll { :_id oid :title "Document 1" :published true })
(is (mgres/ok? (mgcol/update db coll { :_id oid } { $unset { :published 1 :featured true } }))) (is (mgres/ok? (mc/update db coll { :_id oid } { $unset { :published 1 :featured true } })))
(is (= { :_id oid :title "Document 1" } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title "Document 1" } (mc/find-map-by-id db coll oid)))))
;; ;;
;; $setOnInsert ;; $setOnInsert
@ -139,8 +143,8 @@
coll "docs" coll "docs"
now 456 now 456
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/find-and-modify db coll {:_id oid} {$set {:lastseen now} $setOnInsert {:firstseen now}} :upsert true) (mc/find-and-modify db coll {:_id oid} {$set {:lastseen now} $setOnInsert {:firstseen now}} :upsert true)
(is (= { :_id oid :lastseen now :firstseen now} (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :lastseen now :firstseen now} (mc/find-map-by-id db coll oid)))))
(deftest setOnInsert-in-upsert-for-existing-document (deftest setOnInsert-in-upsert-for-existing-document
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
@ -148,9 +152,9 @@
before 123 before 123
now 456 now 456
oid (ObjectId.)] oid (ObjectId.)]
(mgcol/insert db coll { :_id oid :firstseen before :lastseen before}) (mc/insert db coll { :_id oid :firstseen before :lastseen before})
(mgcol/find-and-modify db coll {:_id oid} {$set {:lastseen now} $setOnInsert {:firstseen now}} :upsert true) (mc/find-and-modify db coll {:_id oid} {$set {:lastseen now} $setOnInsert {:firstseen now}} :upsert true)
(is (= { :_id oid :lastseen now :firstseen before} (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :lastseen now :firstseen before} (mc/find-map-by-id db coll oid)))))
;; ;;
;; $push ;; $push
@ -161,18 +165,18 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$push modifier appends value to field"] title "$push modifier appends value to field"]
(mgcol/insert db coll { :_id oid :title title }) (mc/insert db coll { :_id oid :title title })
(mgcol/update db coll { :_id oid } { $push { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $push { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["modifiers"] } (mc/find-map-by-id db coll oid)))))
(deftest add-value-to-an-existing-array-using-$push-modifier (deftest add-value-to-an-existing-array-using-$push-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$push modifier appends value to field"] title "$push modifier appends value to field"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $push { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $push { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mc/find-map-by-id db coll oid)))))
;; this is a common mistake, I leave it here to demonstrate it. You almost never ;; this is a common mistake, I leave it here to demonstrate it. You almost never
@ -182,9 +186,9 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$push modifier appends value to field"] title "$push modifier appends value to field"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $push { :tags ["modifiers" "operators"] } }) (mc/update db coll { :_id oid } { $push { :tags ["modifiers" "operators"] } })
(is (= { :_id oid :title title :tags ["mongodb" ["modifiers" "operators"]] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" ["modifiers" "operators"]] } (mc/find-map-by-id db coll oid)))))
@ -193,10 +197,10 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$push modifier appends value to field"] title "$push modifier appends value to field"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $push { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $push { :tags "modifiers" } })
(mgcol/update db coll { :_id oid } { $push { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $push { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["mongodb" "modifiers" "modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "modifiers" "modifiers"] } (mc/find-map-by-id db coll oid)))))
;; ;;
;; $pushAll ;; $pushAll
@ -207,18 +211,18 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pushAll modifier appends multiple values to field"] title "$pushAll modifier appends multiple values to field"]
(mgcol/insert db coll { :_id oid :title title }) (mc/insert db coll { :_id oid :title title })
(mgcol/update db coll { :_id oid } { $pushAll { :tags ["mongodb" "docs"] } }) (mc/update db coll { :_id oid } { $pushAll { :tags ["mongodb" "docs"] } })
(is (= { :_id oid :title title :tags ["mongodb" "docs"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "docs"] } (mc/find-map-by-id db coll oid)))))
(deftest add-value-to-an-existing-array-using-$pushAll-modifier (deftest add-value-to-an-existing-array-using-$pushAll-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pushAll modifier appends multiple values to field"] title "$pushAll modifier appends multiple values to field"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $pushAll { :tags ["modifiers" "docs"] } }) (mc/update db coll { :_id oid } { $pushAll { :tags ["modifiers" "docs"] } })
(is (= { :_id oid :title title :tags ["mongodb" "modifiers" "docs"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "modifiers" "docs"] } (mc/find-map-by-id db coll oid)))))
(deftest double-add-value-to-an-existing-array-using-$pushAll-modifier (deftest double-add-value-to-an-existing-array-using-$pushAll-modifier
@ -226,9 +230,9 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pushAll modifier appends multiple values to field"] title "$pushAll modifier appends multiple values to field"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb" "docs"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb" "docs"] })
(mgcol/update db coll { :_id oid } { $pushAll { :tags ["modifiers" "docs"] } }) (mc/update db coll { :_id oid } { $pushAll { :tags ["modifiers" "docs"] } })
(is (= { :_id oid :title title :tags ["mongodb" "docs" "modifiers" "docs"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "docs" "modifiers" "docs"] } (mc/find-map-by-id db coll oid)))))
;; ;;
@ -240,18 +244,18 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$addToSet modifier appends value to field unless it is already there"] title "$addToSet modifier appends value to field unless it is already there"]
(mgcol/insert db coll { :_id oid :title title }) (mc/insert db coll { :_id oid :title title })
(mgcol/update db coll { :_id oid } { $addToSet { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $addToSet { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["modifiers"] } (mc/find-map-by-id db coll oid)))))
(deftest add-value-to-an-existing-array-using-$addToSet-modifier (deftest add-value-to-an-existing-array-using-$addToSet-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$addToSet modifier appends value to field unless it is already there"] title "$addToSet modifier appends value to field unless it is already there"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $addToSet { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $addToSet { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mc/find-map-by-id db coll oid)))))
(deftest double-add-value-to-an-existing-array-using-$addToSet-modifier (deftest double-add-value-to-an-existing-array-using-$addToSet-modifier
@ -259,10 +263,10 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$addToSet modifier appends value to field unless it is already there"] title "$addToSet modifier appends value to field unless it is already there"]
(mgcol/insert db coll { :_id oid :title title :tags ["mongodb"] }) (mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
(mgcol/update db coll { :_id oid } { $addToSet { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $addToSet { :tags "modifiers" } })
(mgcol/update db coll { :_id oid } { $addToSet { :tags "modifiers" } }) (mc/update db coll { :_id oid } { $addToSet { :tags "modifiers" } })
(is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["mongodb" "modifiers"] } (mc/find-map-by-id db coll oid)))))
;; ;;
@ -274,27 +278,27 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pop modifier removes last or first value in the array"] title "$pop modifier removes last or first value in the array"]
(mgcol/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] }) (mc/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
(mgcol/update db coll { :_id oid } { $pop { :tags 1 } }) (mc/update db coll { :_id oid } { $pop { :tags 1 } })
(is (= { :_id oid :title title :tags ["products" "apple"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["products" "apple"] } (mc/find-map-by-id db coll oid)))))
(deftest unshift-first-value-in-the-array-using-$pop-modifier (deftest unshift-first-value-in-the-array-using-$pop-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pop modifier removes last or first value in the array"] title "$pop modifier removes last or first value in the array"]
(mgcol/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] }) (mc/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
(mgcol/update db coll { :_id oid } { $pop { :tags -1 } }) (mc/update db coll { :_id oid } { $pop { :tags -1 } })
(is (= { :_id oid :title title :tags ["apple" "reviews"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["apple" "reviews"] } (mc/find-map-by-id db coll oid)))))
(deftest pop-last-values-from-multiple-arrays-using-$pop-modifier (deftest pop-last-values-from-multiple-arrays-using-$pop-modifier
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pop modifier removes last or first value in the array"] title "$pop modifier removes last or first value in the array"]
(mgcol/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] :categories ["apple" "reviews" "drafts"] }) (mc/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] :categories ["apple" "reviews" "drafts"] })
(mgcol/update db coll { :_id oid } { $pop { :tags 1 :categories 1 } }) (mc/update db coll { :_id oid } { $pop { :tags 1 :categories 1 } })
(is (= { :_id oid :title title :tags ["products" "apple"] :categories ["apple" "reviews"] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :tags ["products" "apple"] :categories ["apple" "reviews"] } (mc/find-map-by-id db coll oid)))))
;; ;;
@ -306,18 +310,18 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pull modifier removes all value entries in the array"] title "$pull modifier removes all value entries in the array"]
(mgcol/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] }) (mc/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] })
(mgcol/update db coll { :_id oid } { $pull { :measurements 1.2 } }) (mc/update db coll { :_id oid } { $pull { :measurements 1.2 } })
(is (= { :_id oid :title title :measurements [1.0 1.1 1.1 1.3 1.0] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :measurements [1.0 1.1 1.1 1.3 1.0] } (mc/find-map-by-id db coll oid)))))
(deftest remove-all-value-entries-from-array-using-$pull-modifier-based-on-a-condition (deftest remove-all-value-entries-from-array-using-$pull-modifier-based-on-a-condition
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pull modifier removes all value entries in the array"] title "$pull modifier removes all value entries in the array"]
(mgcol/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] }) (mc/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] })
(mgcol/update db coll { :_id oid } { $pull { :measurements { $gte 1.2 } } }) (mc/update db coll { :_id oid } { $pull { :measurements { $gte 1.2 } } })
(is (= { :_id oid :title title :measurements [1.0 1.1 1.1 1.0] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :measurements [1.0 1.1 1.1 1.0] } (mc/find-map-by-id db coll oid)))))
;; ;;
;; $pullAll ;; $pullAll
;; ;;
@ -327,9 +331,9 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
title "$pullAll modifier removes entries of multiple values in the array"] title "$pullAll modifier removes entries of multiple values in the array"]
(mgcol/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] }) (mc/insert db coll { :_id oid :title title :measurements [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0] })
(mgcol/update db coll { :_id oid } { $pullAll { :measurements [1.0 1.1 1.2] } }) (mc/update db coll { :_id oid } { $pullAll { :measurements [1.0 1.1 1.2] } })
(is (= { :_id oid :title title :measurements [1.3] } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :measurements [1.3] } (mc/find-map-by-id db coll oid)))))
;; ;;
@ -342,9 +346,9 @@
oid (ObjectId.) oid (ObjectId.)
title "$rename renames fields" title "$rename renames fields"
v [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0]] v [1.0 1.2 1.2 1.2 1.1 1.1 1.2 1.3 1.0]]
(mgcol/insert db coll { :_id oid :title title :measurements v }) (mc/insert db coll { :_id oid :title title :measurements v })
(mgcol/update db coll { :_id oid } { $rename { :measurements "results" } }) (mc/update db coll { :_id oid } { $rename { :measurements "results" } })
(is (= { :_id oid :title title :results v } (mgcol/find-map-by-id db coll oid))))) (is (= { :_id oid :title title :results v } (mc/find-map-by-id db coll oid)))))
;; ;;
@ -358,8 +362,8 @@
doc {:_id oid :name "Sophie Bangs" :level 42} doc {:_id oid :name "Sophie Bangs" :level 42}
conditions {:name "Sophie Bangs"} conditions {:name "Sophie Bangs"}
update {$inc {:level 1}}] update {$inc {:level 1}}]
(mgcol/insert db coll doc) (mc/insert db coll doc)
(let [res (mgcol/find-and-modify db coll conditions update :return-new true)] (let [res (mc/find-and-modify db coll conditions update :return-new true)]
(is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 43}))))) (is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 43})))))
@ -369,10 +373,10 @@
oid (ObjectId.) oid (ObjectId.)
doc {:_id oid :name "Sophie Bangs" :level 42} doc {:_id oid :name "Sophie Bangs" :level 42}
conditions {:name "Sophie Bangs"}] conditions {:name "Sophie Bangs"}]
(mgcol/insert db coll doc) (mc/insert db coll doc)
(let [res (mgcol/find-and-modify db coll conditions {} :remove true)] (let [res (mc/find-and-modify db coll conditions {} :remove true)]
(is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 42})) (is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 42}))
(is (empty? (mgcol/find-maps db coll conditions)))))) (is (empty? (mc/find-maps db coll conditions))))))
(deftest find-and-modify-upsert-a-document (deftest find-and-modify-upsert-a-document
@ -381,17 +385,17 @@
coll "docs" coll "docs"
oid (ObjectId.) oid (ObjectId.)
doc {:_id oid :name "Sophie Bangs" :level 42}] doc {:_id oid :name "Sophie Bangs" :level 42}]
(let [res (mgcol/find-and-modify db coll doc doc :upsert true)] (let [res (mc/find-and-modify db coll doc doc :upsert true)]
(is (empty? res)) (is (empty? res))
(is (select-keys (mgcol/find-map-by-id db coll oid) [:name :level]) (dissoc doc :_id))))) (is (select-keys (mc/find-map-by-id db coll oid) [:name :level]) (dissoc doc :_id)))))
(testing "case 2" (testing "case 2"
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
coll "docs" coll "docs"
query {:name "Sophie Bangs"} query {:name "Sophie Bangs"}
doc (merge query {:level 42})] doc (merge query {:level 42})]
(let [res (mgcol/find-and-modify db coll query doc :upsert true :return-new true)] (let [res (mc/find-and-modify db coll query doc :upsert true :return-new true)]
(is (:_id res)) (is (:_id res))
(is (select-keys (mgcol/find-map-by-id db coll (:_id res)) [:name :level]) doc))))) (is (select-keys (mc/find-map-by-id db coll (:_id res)) [:name :level]) doc)))))
(deftest find-and-modify-after-sort (deftest find-and-modify-after-sort
@ -402,6 +406,6 @@
doc {:name "Sophie Bangs"} doc {:name "Sophie Bangs"}
doc1 (assoc doc :_id oid :level 42) doc1 (assoc doc :_id oid :level 42)
doc2 (assoc doc :_id oid2 :level 0)] doc2 (assoc doc :_id oid2 :level 0)]
(mgcol/insert-batch db coll [doc1 doc2]) (mc/insert-batch db coll [doc1 doc2])
(let [res (mgcol/find-and-modify db coll doc {$inc {:level 1}} :sort {:level -1})] (let [res (mc/find-and-modify db coll doc {$inc {:level 1}} :sort {:level -1})]
(is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 42}))))) (is (= (select-keys res [:name :level]) {:name "Sophie Bangs" :level 42})))))

View file

@ -14,12 +14,15 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "things")
(mc/remove db "libraries")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
(deftest get-collection-size (deftest get-collection-size
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")

View file

@ -4,7 +4,7 @@
java.util.Date) java.util.Date)
(:require [monger.core :as mg] (:require [monger.core :as mg]
[monger.util :as mu] [monger.util :as mu]
[monger.multi.collection :as mgcol] [monger.multi.collection :as mc]
[monger.test.helper :as helper] [monger.test.helper :as helper]
[monger.conversion :as mgcnv] [monger.conversion :as mgcnv]
[clojure.test :refer :all] [clojure.test :refer :all]
@ -14,12 +14,15 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "libraries")
(mc/remove db "docs")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
;; ;;
;; find ;; find
@ -28,119 +31,119 @@
(deftest find-full-document-when-collection-is-empty (deftest find-full-document-when-collection-is-empty
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "docs" collection "docs"
cursor (mgcol/find db collection)] cursor (mc/find db collection)]
(is (empty? (iterator-seq cursor))))) (is (empty? (iterator-seq cursor)))))
(deftest find-document-seq-when-collection-is-empty (deftest find-document-seq-when-collection-is-empty
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "docs"] collection "docs"]
(is (empty? (mgcol/find-seq db collection))))) (is (empty? (mc/find-seq db collection)))))
(deftest find-multiple-documents-when-collection-is-empty (deftest find-multiple-documents-when-collection-is-empty
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(is (empty? (mgcol/find db collection { :language "Scala" }))))) (is (empty? (mc/find db collection { :language "Scala" })))))
(deftest find-multiple-maps-when-collection-is-empty (deftest find-multiple-maps-when-collection-is-empty
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(is (empty? (mgcol/find-maps db collection { :language "Scala" }))))) (is (empty? (mc/find-maps db collection { :language "Scala" })))))
(deftest find-multiple-documents-by-regex (deftest find-multiple-documents-by-regex
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Java", :name "nhibernate" } { :language "Java", :name "nhibernate" }
{ :language "JavaScript", :name "sprout-core" }]) { :language "JavaScript", :name "sprout-core" }])
(is (= 2 (monger.core/count (mgcol/find db collection { :language #"Java*" })))))) (is (= 2 (monger.core/count (mc/find db collection { :language #"Java*" }))))))
(deftest find-multiple-documents (deftest find-multiple-documents
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" } { :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" } { :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }]) { :language "Scala", :name "akka" }])
(is (= 1 (monger.core/count (mgcol/find db collection { :language "Scala" })))) (is (= 1 (monger.core/count (mc/find db collection { :language "Scala" }))))
(is (= 3 (.count (mgcol/find db collection { :language "Clojure" })))) (is (= 3 (.count (mc/find db collection { :language "Clojure" }))))
(is (empty? (mgcol/find db collection { :language "Java" }))))) (is (empty? (mc/find db collection { :language "Java" })))))
(deftest find-document-specify-fields (deftest find-document-specify-fields
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries" collection "libraries"
_ (mgcol/insert db collection { :language "Clojure", :name "monger" }) _ (mc/insert db collection { :language "Clojure", :name "monger" })
result (mgcol/find db collection { :language "Clojure"} [:language])] result (mc/find db collection { :language "Clojure"} [:language])]
(is (= (seq [:_id :language]) (keys (mgcnv/from-db-object (.next result) true)))))) (is (= (seq [:_id :language]) (keys (mgcnv/from-db-object (.next result) true))))))
(deftest find-and-iterate-over-multiple-documents-the-hard-way (deftest find-and-iterate-over-multiple-documents-the-hard-way
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" } { :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" } { :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }]) { :language "Scala", :name "akka" }])
(doseq [doc (take 3 (map (fn [dbo] (doseq [doc (take 3 (map (fn [dbo]
(mgcnv/from-db-object dbo true)) (mgcnv/from-db-object dbo true))
(mgcol/find-seq db collection { :language "Clojure" })))] (mc/find-seq db collection { :language "Clojure" })))]
(is (= "Clojure" (:language doc)))))) (is (= "Clojure" (:language doc))))))
(deftest find-and-iterate-over-multiple-documents (deftest find-and-iterate-over-multiple-documents
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" } { :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" } { :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }]) { :language "Scala", :name "akka" }])
(doseq [doc (take 3 (mgcol/find-maps db collection { :language "Clojure" }))] (doseq [doc (take 3 (mc/find-maps db collection { :language "Clojure" }))]
(is (= "Clojure" (:language doc)))))) (is (= "Clojure" (:language doc))))))
(deftest find-multiple-maps (deftest find-multiple-maps
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" } { :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" } { :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }]) { :language "Scala", :name "akka" }])
(is (= 1 (count (mgcol/find-maps db collection { :language "Scala" })))) (is (= 1 (count (mc/find-maps db collection { :language "Scala" }))))
(is (= 3 (count (mgcol/find-maps db collection { :language "Clojure" })))) (is (= 3 (count (mc/find-maps db collection { :language "Clojure" }))))
(is (empty? (mgcol/find-maps db collection { :language "Java" }))) (is (empty? (mc/find-maps db collection { :language "Java" })))
(is (empty? (mgcol/find-maps db collection { :language "Java" } [:language :name]))))) (is (empty? (mc/find-maps db collection { :language "Java" } [:language :name])))))
(deftest find-multiple-partial-documents (deftest find-multiple-partial-documents
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" } { :language "Clojure", :name "langohr" }
{ :language "Clojure", :name "incanter" } { :language "Clojure", :name "incanter" }
{ :language "Scala", :name "akka" }]) { :language "Scala", :name "akka" }])
(let [scala-libs (mgcol/find db collection { :language "Scala" } [:name]) (let [scala-libs (mc/find db collection { :language "Scala" } [:name])
clojure-libs (mgcol/find db collection { :language "Clojure"} [:language])] clojure-libs (mc/find db collection { :language "Clojure"} [:language])]
(is (= 1 (.count scala-libs))) (is (= 1 (.count scala-libs)))
(is (= 3 (.count clojure-libs))) (is (= 3 (.count clojure-libs)))
(doseq [i clojure-libs] (doseq [i clojure-libs]
(let [doc (mgcnv/from-db-object i true)] (let [doc (mgcnv/from-db-object i true)]
(is (= (:language doc) "Clojure")))) (is (= (:language doc) "Clojure"))))
(is (empty? (mgcol/find db collection { :language "Erlang" } [:name])))))) (is (empty? (mc/find db collection { :language "Erlang" } [:name]))))))
(deftest finds-one-as-map (deftest finds-one-as-map
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }]) { :language "Clojure", :name "langohr" }])
(let [res (mgcol/find-one-as-map db collection { :name "langohr" })] (let [res (mc/find-one-as-map db collection { :name "langohr" })]
(is (map? res)) (is (map? res))
(is (= "langohr" (:name res))) (is (= "langohr" (:name res)))
(is (= "Clojure" (:language res)))) (is (= "Clojure" (:language res))))
(is (= 2 (count (mgcol/find-one-as-map db collection { :name "langohr" } [:name])))) (is (= 2 (count (mc/find-one-as-map db collection { :name "langohr" } [:name]))))
(is (= "langohr" (get (mgcol/find-one-as-map db collection { :name "langohr" } [:name] false) "name"))))) (is (= "langohr" (get (mc/find-one-as-map db collection { :name "langohr" } [:name] false) "name")))))
(deftest find-and-modify (deftest find-and-modify
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")
collection "libraries"] collection "libraries"]
(mgcol/insert-batch db collection [{ :language "Clojure", :name "monger" } (mc/insert-batch db collection [{ :language "Clojure", :name "monger" }
{ :language "Clojure", :name "langohr" }]))) { :language "Clojure", :name "langohr" }])))

View file

@ -11,12 +11,15 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "libraries")
(mc/remove db "recent_events")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
(deftest ^{:indexing true} test-creating-and-dropping-indexes (deftest ^{:indexing true} test-creating-and-dropping-indexes
(let [db (mg/get-db "altdb") (let [db (mg/get-db "altdb")

View file

@ -13,12 +13,15 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "people")
(mc/remove db "widgets")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
;; ;;
;; insert ;; insert

View file

@ -16,12 +16,17 @@
(helper/connect!) (helper/connect!)
(defn drop-altdb (def db (mg/get-db "altdb"))
(defn purge-altdb
[f] [f]
(mg/drop-db "altdb") (mc/remove db "libraries")
(mc/remove db "people")
(mc/remove db "matches")
(f)) (f))
(use-fixtures :each drop-altdb) (use-fixtures :each purge-altdb)
;; ;;
;; update, save ;; update, save