Atomic modifiers tests now pass
This commit is contained in:
parent
60a419953f
commit
565ec43398
1 changed files with 392 additions and 357 deletions
|
|
@ -1,19 +1,28 @@
|
||||||
(ns monger.test.atomic-modifiers-test
|
(ns monger.test.atomic-modifiers-test
|
||||||
(:import [com.mongodb WriteResult WriteConcern DBCursor DBObject]
|
(:import [com.mongodb WriteResult WriteConcern DBObject]
|
||||||
[org.bson.types ObjectId]
|
[org.bson.types ObjectId]
|
||||||
[java.util Date])
|
java.util.Date)
|
||||||
(:require [monger core util]
|
(:require [monger.core :as mg]
|
||||||
[monger.collection :as mgcol]
|
[monger.collection :as mc]
|
||||||
[monger.result :as mgres]
|
[monger.result :as mgres]
|
||||||
[monger.test.helper :as helper]
|
|
||||||
[clojure.test :refer :all]
|
[clojure.test :refer :all]
|
||||||
[monger.operators :refer :all]
|
[monger.operators :refer :all]))
|
||||||
[monger.test.fixtures :refer :all]))
|
|
||||||
|
|
||||||
(helper/connect!)
|
|
||||||
|
|
||||||
(use-fixtures :each purge-docs purge-things purge-scores)
|
(let [conn (mg/connect)
|
||||||
|
db (mg/get-db conn "monger-test")]
|
||||||
|
|
||||||
|
(defn purge-collections
|
||||||
|
[f]
|
||||||
|
(mc/remove db "docs")
|
||||||
|
(mc/remove db "things")
|
||||||
|
(mc/remove db "scores")
|
||||||
|
(f)
|
||||||
|
(mc/remove db "docs")
|
||||||
|
(mc/remove db "things")
|
||||||
|
(mc/remove db "scores"))
|
||||||
|
|
||||||
|
(use-fixtures :each purge-collections)
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $inc
|
;; $inc
|
||||||
|
|
@ -22,32 +31,34 @@
|
||||||
(deftest increment-a-single-existing-field-using-$inc-modifier
|
(deftest increment-a-single-existing-field-using-$inc-modifier
|
||||||
(let [coll "scores"
|
(let [coll "scores"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :username "l33r0y" :score 100 })
|
(mc/insert db coll { :_id oid :username "l33r0y" :score 100 })
|
||||||
(mgcol/update coll { :_id oid } { $inc { :score 20 } })
|
(mc/update db coll { :_id oid } { $inc { :score 20 } })
|
||||||
(is (= 120 (:score (mgcol/find-map-by-id 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 [coll "scores"
|
(let [coll "scores"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :username "l33r0y" })
|
(mc/insert db coll { :_id oid :username "l33r0y" })
|
||||||
(mgcol/update coll { :_id oid } { $inc { :score 30 } })
|
(mc/update db coll { :_id oid } { $inc { :score 30 } })
|
||||||
(is (= 30 (:score (mgcol/find-map-by-id 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 [coll "scores"
|
(let [coll "scores"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :username "l33r0y" :score 100 :bonus 0 })
|
(mc/insert db coll { :_id oid :username "l33r0y" :score 100 :bonus 0 })
|
||||||
(mgcol/update 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 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 [coll "scores"
|
(let [coll "scores"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :username "l33r0y" :score 100 })
|
(mc/insert db coll { :_id oid :username "l33r0y" :score 100 })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :score 120 :bonus 10 :username "l33r0y" }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -58,31 +69,33 @@
|
||||||
(deftest update-a-single-existing-field-using-$set-modifier
|
(deftest update-a-single-existing-field-using-$set-modifier
|
||||||
(let [coll "things"
|
(let [coll "things"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :weight 10.0 })
|
(mc/insert db coll { :_id oid :weight 10.0 })
|
||||||
(mgcol/update 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 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 [coll "things"
|
(let [coll "things"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :weight 10.0 })
|
(mc/insert db coll { :_id oid :weight 10.0 })
|
||||||
(mgcol/update 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 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 [coll "things"
|
(let [coll "things"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :weight 10.0 :height 15.2 })
|
(mc/insert db coll { :_id oid :weight 10.0 :height 15.2 })
|
||||||
(mgcol/update 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 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 [coll "things"
|
(let [coll "things"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :weight 10.0 })
|
(mc/insert db coll { :_id oid :weight 10.0 })
|
||||||
(mgcol/update 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 coll oid [:weight :height])))))
|
(is (= { :_id oid :weight 20.5 :height 25.6 }
|
||||||
|
(mc/find-map-by-id db coll oid [:weight :height])))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -92,25 +105,28 @@
|
||||||
(deftest unset-a-single-existing-field-using-$unset-modifier
|
(deftest unset-a-single-existing-field-using-$unset-modifier
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :title "Document 1" :published true })
|
(mc/insert db coll { :_id oid :title "Document 1" :published true })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert 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 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 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 [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :title "Document 1" :published true })
|
(mc/insert db coll { :_id oid :title "Document 1" :published true })
|
||||||
(is (mgres/ok? (mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title "Document 1" }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $setOnInsert
|
;; $setOnInsert
|
||||||
|
|
@ -120,17 +136,19 @@
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
now 456
|
now 456
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/find-and-modify 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 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 [coll "docs"
|
(let [coll "docs"
|
||||||
before 123
|
before 123
|
||||||
now 456
|
now 456
|
||||||
oid (ObjectId.)]
|
oid (ObjectId.)]
|
||||||
(mgcol/insert coll { :_id oid :firstseen before :lastseen before})
|
(mc/insert db coll { :_id oid :firstseen before :lastseen before})
|
||||||
(mgcol/find-and-modify 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 coll oid)))))
|
(is (= { :_id oid :lastseen now :firstseen before}
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $push
|
;; $push
|
||||||
|
|
@ -140,17 +158,19 @@
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$push modifier appends value to field"]
|
title "$push modifier appends value to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title })
|
(mc/insert db coll { :_id oid :title title })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$push modifier appends value to field"]
|
title "$push modifier appends value to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update 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 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
|
||||||
|
|
@ -159,9 +179,10 @@
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$push modifier appends value to field"]
|
title "$push modifier appends value to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title title :tags ["mongodb" ["modifiers" "operators"]] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -169,10 +190,11 @@
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$push modifier appends value to field"]
|
title "$push modifier appends value to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update coll { :_id oid } { $push { :tags "modifiers" } })
|
(mc/update db coll { :_id oid } { $push { :tags "modifiers" } })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title title :tags ["mongodb" "modifiers" "modifiers"] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $pushAll
|
;; $pushAll
|
||||||
|
|
@ -182,26 +204,29 @@
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$pushAll modifier appends multiple values to field"]
|
title "$pushAll modifier appends multiple values to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title })
|
(mc/insert db coll { :_id oid :title title })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$pushAll modifier appends multiple values to field"]
|
title "$pushAll modifier appends multiple values to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update 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 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
|
||||||
(let [coll "docs"
|
(let [coll "docs"
|
||||||
oid (ObjectId.)
|
oid (ObjectId.)
|
||||||
title "$pushAll modifier appends multiple values to field"]
|
title "$pushAll modifier appends multiple values to field"]
|
||||||
(mgcol/insert coll { :_id oid :title title :tags ["mongodb" "docs"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb" "docs"] })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title title :tags ["mongodb" "docs" "modifiers" "docs"] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -212,27 +237,30 @@
|
||||||
(let [coll "docs"
|
(let [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 coll { :_id oid :title title })
|
(mc/insert db coll { :_id oid :title title })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [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 coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update 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 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
|
||||||
(let [coll "docs"
|
(let [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 coll { :_id oid :title title :tags ["mongodb"] })
|
(mc/insert db coll { :_id oid :title title :tags ["mongodb"] })
|
||||||
(mgcol/update coll { :_id oid } { $addToSet { :tags "modifiers" } })
|
(mc/update db coll { :_id oid } { $addToSet { :tags "modifiers" } })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title title :tags ["mongodb" "modifiers"] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -243,25 +271,28 @@
|
||||||
(let [coll "docs"
|
(let [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 coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
|
(mc/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [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 coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
|
(mc/insert db coll { :_id oid :title title :tags ["products" "apple" "reviews"] })
|
||||||
(mgcol/update 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 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 [coll "docs"
|
(let [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 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 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 coll oid)))))
|
(is (= { :_id oid :title title :tags ["products" "apple"] :categories ["apple" "reviews"] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -272,17 +303,19 @@
|
||||||
(let [coll "docs"
|
(let [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 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 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 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 [coll "docs"
|
(let [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 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 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 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
|
||||||
;;
|
;;
|
||||||
|
|
@ -291,9 +324,10 @@
|
||||||
(let [coll "docs"
|
(let [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 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 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 coll oid)))))
|
(is (= { :_id oid :title title :measurements [1.3] }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -305,9 +339,10 @@
|
||||||
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 coll { :_id oid :title title :measurements v })
|
(mc/insert db coll { :_id oid :title title :measurements v })
|
||||||
(mgcol/update 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 coll oid)))))
|
(is (= { :_id oid :title title :results v }
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
@ -320,8 +355,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 coll doc)
|
(mc/insert db coll doc)
|
||||||
(let [res (mgcol/find-and-modify 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})))))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -330,10 +365,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 coll doc)
|
(mc/insert db coll doc)
|
||||||
(let [res (mgcol/find-and-modify 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 coll conditions))))))
|
(is (empty? (mc/find-maps db coll conditions))))))
|
||||||
|
|
||||||
|
|
||||||
(deftest find-and-modify-upsert-a-document
|
(deftest find-and-modify-upsert-a-document
|
||||||
|
|
@ -341,16 +376,16 @@
|
||||||
(let [coll "docs"
|
(let [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 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 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 [coll "docs"
|
(let [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 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 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
|
||||||
|
|
@ -360,6 +395,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 coll [doc1 doc2])
|
(mc/insert-batch db coll [doc1 doc2])
|
||||||
(let [res (mgcol/find-and-modify 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}))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue