Support for $each modifier
This commit is contained in:
parent
a8a9ab16b6
commit
2c019e5e91
2 changed files with 71 additions and 0 deletions
|
|
@ -147,8 +147,18 @@
|
||||||
;; (mgcol/update "docs" { :_id oid } { $push { :tags "modifiers" } })
|
;; (mgcol/update "docs" { :_id oid } { $push { :tags "modifiers" } })
|
||||||
(defoperator $push)
|
(defoperator $push)
|
||||||
|
|
||||||
|
;; $each is a modifier for the $push and $addToSet operators for appending multiple values to an array field.
|
||||||
|
;; Without the $each modifier $push and $addToSet will append an array as a single value.
|
||||||
|
;; MongoDB 2.4 adds support for the $each modifier to the $push operator.
|
||||||
|
;; In MongoDB 2.2 the $each modifier can only be used with the $addToSet operator.
|
||||||
|
;;
|
||||||
|
;; EXAMPLES:
|
||||||
|
;; (mgcol/update coll { :_id oid } { $push { :tags { $each ["mongodb" "docs"] } } })
|
||||||
|
(defoperator $each)
|
||||||
|
|
||||||
;; $pushAll appends each value in value_array to field, if field is an existing array, otherwise sets field to the array value_array
|
;; $pushAll appends each value in value_array to field, if field is an existing array, otherwise sets field to the array value_array
|
||||||
;; if field is not present. If field is present but is not an array, an error condition is raised.
|
;; if field is not present. If field is present but is not an array, an error condition is raised.
|
||||||
|
;; Deprecated since MongoDB 2.4, $push with $each modifier should be used instead.
|
||||||
;;
|
;;
|
||||||
;; EXAMPLES:
|
;; EXAMPLES:
|
||||||
;; (mgcol/update coll { :_id oid } { $pushAll { :tags ["mongodb" "docs"] } })
|
;; (mgcol/update coll { :_id oid } { $pushAll { :tags ["mongodb" "docs"] } })
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,37 @@
|
||||||
(is (= {:_id oid :title title :tags ["mongodb" "modifiers" "modifiers"]}
|
(is (= {:_id oid :title title :tags ["mongodb" "modifiers" "modifiers"]}
|
||||||
(mc/find-map-by-id db coll oid)))))
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; $push $each
|
||||||
|
;;
|
||||||
|
|
||||||
|
(deftest initialize-an-array-using-$push-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$push with $each modifier appends multiple values to field"]
|
||||||
|
(mc/insert db coll {:_id oid :title title})
|
||||||
|
(mc/update db coll {:_id oid} {$push {:tags {$each ["mongodb" "docs"]}}})
|
||||||
|
(is (= {:_id oid :title title :tags ["mongodb" "docs"]}
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
(deftest add-values-to-an-existing-array-using-$push-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$push with $each modifier appends multiple values to field"]
|
||||||
|
(mc/insert db coll {:_id oid :title title :tags ["mongodb"]})
|
||||||
|
(mc/update db coll {:_id oid} {$push {:tags {$each ["modifiers" "docs"]}}})
|
||||||
|
(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-$push-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$push with $each modifier appends multiple values to field"]
|
||||||
|
(mc/insert db coll {:_id oid :title title :tags ["mongodb" "docs"]})
|
||||||
|
(mc/update db coll {:_id oid} {$push {:tags {$each ["modifiers" "docs"]}}})
|
||||||
|
(is (= {:_id oid :title title :tags ["mongodb" "docs" "modifiers" "docs"]}
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $pushAll
|
;; $pushAll
|
||||||
;;
|
;;
|
||||||
|
|
@ -262,6 +293,36 @@
|
||||||
(is (= {:_id oid :title title :tags ["mongodb" "modifiers"]}
|
(is (= {:_id oid :title title :tags ["mongodb" "modifiers"]}
|
||||||
(mc/find-map-by-id db coll oid)))))
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
;;
|
||||||
|
;; $addToSet $each
|
||||||
|
;;
|
||||||
|
|
||||||
|
(deftest initialize-an-array-using-$addToSet-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$addToSet with $each modifier appends multiple values to field unless they are already there"]
|
||||||
|
(mc/insert db coll {:_id oid :title title})
|
||||||
|
(mc/update db coll {:_id oid} {$addToSet {:tags {$each ["mongodb" "docs"]}}})
|
||||||
|
(is (= {:_id oid :title title :tags ["mongodb" "docs"]}
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
|
(deftest add-values-to-an-existing-array-using-$addToSet-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$addToSet with $each modifier appends multiple values to field unless they are already there"]
|
||||||
|
(mc/insert db coll {:_id oid :title title :tags ["mongodb"]})
|
||||||
|
(mc/update db coll {:_id oid} {$addToSet {:tags {$each ["modifiers" "docs"]}}})
|
||||||
|
(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-$addToSet-$each-modifier
|
||||||
|
(let [coll "docs"
|
||||||
|
oid (ObjectId.)
|
||||||
|
title "$addToSet with $each modifier appends multiple values to field unless they are already there"]
|
||||||
|
(mc/insert db coll {:_id oid :title title :tags ["mongodb" "docs"]})
|
||||||
|
(mc/update db coll {:_id oid} {$addToSet {:tags {$each ["modifiers" "docs" "operators"]}}})
|
||||||
|
(is (= {:_id oid :title title :tags ["mongodb" "docs" "modifiers" "operators"]}
|
||||||
|
(mc/find-map-by-id db coll oid)))))
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; $pop
|
;; $pop
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue