From 1c62587165ab4e73941d91d79c2446b6fdd5f24c Mon Sep 17 00:00:00 2001 From: Robin Heggelund Hansen Date: Tue, 21 Oct 2014 06:00:56 +0200 Subject: [PATCH] Fixes #77: Add update-by-ids function to mongo.collection --- src/clojure/monger/collection.clj | 15 +++++++++++++++ test/monger/test/collection_test.clj | 10 +++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/clojure/monger/collection.clj b/src/clojure/monger/collection.clj index 33aebd4..05f7366 100644 --- a/src/clojure/monger/collection.clj +++ b/src/clojure/monger/collection.clj @@ -284,6 +284,21 @@ false write-concern))) +(defn ^WriteResult update-by-ids + "Update documents by given ids" + ([^DB db ^String coll ids ^Map document] + (update-by-ids db coll ids document {})) + ([^DB db ^String coll ids ^Map document {:keys [upsert write-concern] + :or {upsert false + write-concern mc/*mongodb-write-concern*}}] + (check-not-nil! (seq ids) "ids must not be nil or empty") + (.update (.getCollection db (name coll)) + (to-db-object {:_id {"$in" ids}}) + (to-db-object document) + upsert + true + write-concern))) + ;; monger.collection/save diff --git a/test/monger/test/collection_test.clj b/test/monger/test/collection_test.clj index 88d1c74..ad79fda 100644 --- a/test/monger/test/collection_test.clj +++ b/test/monger/test/collection_test.clj @@ -163,7 +163,15 @@ (mc/insert-batch db coll batch) (is (= "bed" (:type (mc/find-one-as-map db coll {:_id 2})))) (mc/update-by-id db coll 2 {"$set" {:type "living room"}}) - (is (= "living room" (:type (mc/find-one-as-map db coll {:_id 2})))))) + (is (= "living room" (:type (mc/find-one-as-map db coll {:_id 2}))))) + + (deftest test-update-by-ids + (mc/insert-batch db coll batch) + (is (= "bed" (:type (mc/find-one-as-map db coll {:_id 2})))) + (is (= "bottle" (:type (mc/find-one-as-map db coll {:_id 3})))) + (mc/update-by-ids db coll [2 3] {"$set" {:type "dog"}}) + (is (= "dog" (:type (mc/find-one-as-map db coll {:_id 2})))) + (is (= "dog" (:type (mc/find-one-as-map db coll {:_id 3})))))) ;; ;; miscellenous