From 5d31f9fc1a4a6bce4b8a610d06dc71593c52e3c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 11:31:45 +0800 Subject: [PATCH 01/11] support java Bigdecimal in mongodb 3.4 or later --- project.clj | 2 +- src/clojure/monger/conversion.clj | 10 +++++++--- test/monger/test/conversion_test.clj | 10 +++++++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/project.clj b/project.clj index f24d283..4c92739 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.8.0"] - [org.mongodb/mongodb-driver "3.4.2"] + [org.mongodb/mongodb-driver "3.6.0-beta2"] [clojurewerkz/support "1.1.0"]] :test-selectors {:default (fn [m] (and (not (:performance m)) diff --git a/src/clojure/monger/conversion.clj b/src/clojure/monger/conversion.clj index 8ed2c5f..02e97a5 100644 --- a/src/clojure/monger/conversion.clj +++ b/src/clojure/monger/conversion.clj @@ -46,7 +46,8 @@ (:import [com.mongodb DBObject BasicDBObject BasicDBList DBCursor] [clojure.lang IPersistentMap Named Keyword Ratio] [java.util List Map Date Set] - org.bson.types.ObjectId)) + org.bson.types.ObjectId + (org.bson.types Decimal128))) (defprotocol ConvertToDBObject (^com.mongodb.DBObject to-db-object [input] "Converts given piece of Clojure data to BasicDBObject MongoDB Java driver uses")) @@ -104,7 +105,6 @@ - (defprotocol ConvertFromDBObject (from-db-object [input keywordize] "Converts given DBObject instance to a piece of Clojure data")) @@ -115,6 +115,11 @@ Object (from-db-object [input keywordize] input) + Decimal128 + (from-db-object [^Decimal128 input keywordize] + (.bigDecimalValue input) + ) + List (from-db-object [^List input keywordize] (vec (map #(from-db-object % keywordize) input))) @@ -140,7 +145,6 @@ {} (.keySet input)))) - (defprotocol ConvertToObjectId (^org.bson.types.ObjectId to-object-id [input] "Instantiates ObjectId from input unless the input itself is an ObjectId instance. In that case, returns input as is.")) diff --git a/test/monger/test/conversion_test.clj b/test/monger/test/conversion_test.clj index c989574..7e3e49a 100644 --- a/test/monger/test/conversion_test.clj +++ b/test/monger/test/conversion_test.clj @@ -4,7 +4,8 @@ [monger.conversion :refer :all]) (:import [com.mongodb DBObject BasicDBObject BasicDBList] [java.util Date Calendar List ArrayList] - org.bson.types.ObjectId)) + org.bson.types.ObjectId + (org.bson.types Decimal128))) ;; @@ -101,6 +102,13 @@ (is (= 2 (from-db-object 2 false))) (is (= 2 (from-db-object 2 true)))) +(deftest convert-decimal-from-dbobject + (is (= 2.3M (from-db-object (Decimal128. 2.3M) false))) + (is (= 2.3M (from-db-object (Decimal128. 2.3M) true))) + (is (= 2.3M (from-db-object (Decimal128/parse "2.3") true))) + (is (not= 2.32M (from-db-object (Decimal128/parse "2.3") true))) + ) + (deftest convert-float-from-dbobject (is (= 3.3 (from-db-object 3.3 false))) (is (= 3.3 (from-db-object 3.3 true)))) From 993bb038d9bfa70587f75d63b86f17c0a19d42ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:14:55 +0800 Subject: [PATCH 02/11] ci test tip No command 'lein2' found, did you mean: test mongodb version up to 3.5 --- .travis.yml | 6 +++--- bin/ci/install_mongodb.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 58485c3..18cdc32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,10 @@ language: clojure -lein: lein2 +lein: lein before_script: - - ./bin/ci/install_mongodb.sh + - ./bin/ci/install_mongodb.sh - mongod --version - ./bin/ci/before_script.sh -script: lein2 do clean, javac, test +script: lein do clean, javac, test jdk: - openjdk7 - oraclejdk7 diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index 74c671b..a72da2d 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,7 +1,7 @@ #!/bin/sh sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 -echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list +echo "deb http://repo.mongodb.org/apt/debian/dists/wheezy/mongodb-org/3.5/ main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-get update sudo apt-get install -y mongodb-org From 79387a694ac2a1d7b02ae137cdc65951d1233efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:36:43 +0800 Subject: [PATCH 03/11] This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid, and setgid executables. If you require sudo, add 'sudo: required' to your .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 18cdc32..b830e7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: clojure +sudo: required lein: lein before_script: - ./bin/ci/install_mongodb.sh From 15831490d9a941b3cfe3fc3042982aae2b8b8013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:43:22 +0800 Subject: [PATCH 04/11] mongodb 3.4 repo url repair --- bin/ci/install_mongodb.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index a72da2d..51b2312 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,7 +1,7 @@ #!/bin/sh sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 -echo "deb http://repo.mongodb.org/apt/debian/dists/wheezy/mongodb-org/3.5/ main" | sudo tee /etc/apt/sources.list.d/mongodb-org.list +echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-get update sudo apt-get install -y mongodb-org From c35545a97ab8aad4006c6a2072adee3ee1ce96f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:46:53 +0800 Subject: [PATCH 05/11] update sudo apt-key adv --- bin/ci/install_mongodb.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/ci/install_mongodb.sh b/bin/ci/install_mongodb.sh index 51b2312..6645e06 100755 --- a/bin/ci/install_mongodb.sh +++ b/bin/ci/install_mongodb.sh @@ -1,6 +1,7 @@ #!/bin/sh -sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 +#sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 +sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 0C49F3730359A14518585931BC711F9BA15703C6 echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org.list sudo apt-get update From 20b4d5d93ba2de7e7b8f4aeaac36e0d12cf02aad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=AF=E5=BF=A0=E5=AD=9D?= <32647908@qq.com> Date: Sat, 18 Nov 2017 12:53:18 +0800 Subject: [PATCH 06/11] add travis-ci.org build image --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5a8ac8a..8f906dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Monger, a modern Clojure MongoDB Driver - +[![Build Status](https://travis-ci.org/xingzhefeng/monger.svg?branch=master)](https://travis-ci.org/xingzhefeng/monger) Monger is an idiomatic [Clojure MongoDB driver](http://clojuremongodb.info) for a more civilized age. It has batteries included, offers powerful expressive query DSL, strives to support every MongoDB 2.0+ feature and has sane defaults. Monger is built from for modern Clojure versions and sits on top of the official MongoDB Java driver. From 1a256a60331ef02b2714cdd7358d33e1b8b0ceb8 Mon Sep 17 00:00:00 2001 From: amitvshah25 Date: Thu, 14 Dec 2017 12:58:44 -0500 Subject: [PATCH 07/11] Update operators.clj Added count and dateToString operators. --- src/clojure/monger/operators.clj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/clojure/monger/operators.clj b/src/clojure/monger/operators.clj index 31cff42..ae4a828 100644 --- a/src/clojure/monger/operators.clj +++ b/src/clojure/monger/operators.clj @@ -320,3 +320,6 @@ ;; EXAMPLES: ;; (mgcol/update "libraries" { :language "Clojure", $isolated 1 } { $inc { :popularity 1 } } {:multi true}) (defoperator $isolated) + +(defoperator $count) +(defoperator $dateToString) From dc61982ced24563edbff1868f7f9359d4a0b5582 Mon Sep 17 00:00:00 2001 From: Xtreak Date: Sat, 17 Mar 2018 11:12:23 +0530 Subject: [PATCH 08/11] Add JDK 9 to Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b830e7e..760158e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,7 @@ jdk: - openjdk7 - oraclejdk7 - oraclejdk8 + - oraclejdk9 services: - mongodb branches: From 89e8538d915920dc67cf8f8f3a91479f5ec2cb85 Mon Sep 17 00:00:00 2001 From: Michael Klishin Date: Tue, 10 Apr 2018 14:29:23 +0300 Subject: [PATCH 09/11] Drop JDK 7 tests on Travis --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 760158e..d9e866d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,8 +7,6 @@ before_script: - ./bin/ci/before_script.sh script: lein do clean, javac, test jdk: - - openjdk7 - - oraclejdk7 - oraclejdk8 - oraclejdk9 services: From 7466db5c4d8aa6b9bc40ed3c59506d846eb06a9b Mon Sep 17 00:00:00 2001 From: Vladyslav Aleksakhin Date: Wed, 2 May 2018 11:07:31 +0200 Subject: [PATCH 10/11] Add :keywordize option for aggregate that control if resulting map keys will be turned into keywords, default is true. --- src/clojure/monger/collection.clj | 8 +++++-- .../test/aggregation_framework_test.clj | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/clojure/monger/collection.clj b/src/clojure/monger/collection.clj index 2c3addd..0a50e97 100644 --- a/src/clojure/monger/collection.clj +++ b/src/clojure/monger/collection.clj @@ -541,13 +541,17 @@ is supported, for specifying a limit on the execution time of the query in milliseconds. + :keywordize option that control if resulting map keys will be turned into keywords, default is true. + See http://docs.mongodb.org/manual/applications/aggregation/ to learn more." [^DB db ^String coll stages & opts] (let [coll (.getCollection db coll) agg-opts (build-aggregation-options opts) pipe (into-array-list (to-db-object stages)) - res (.aggregate coll pipe agg-opts)] - (map #(from-db-object % true) (iterator-seq res)))) + res (.aggregate coll pipe agg-opts) + {:keys [^Boolean keywordize] + :or {keywordize true}} opts] + (map #(from-db-object % keywordize) (iterator-seq res)))) (defn explain-aggregate "Returns the explain plan for an aggregation query. MongoDB 2.2+ only. diff --git a/test/monger/test/aggregation_framework_test.clj b/test/monger/test/aggregation_framework_test.clj index b243168..76abf9c 100644 --- a/test/monger/test/aggregation_framework_test.clj +++ b/test/monger/test/aggregation_framework_test.clj @@ -15,6 +15,27 @@ (use-fixtures :each purge-collections) + (deftest test-basic-single-stage-$project-aggregation-no-keywordize + (let [batch [{"state" "CA" "quantity" 1 "price" 199.00} + {"state" "NY" "quantity" 2 "price" 199.00} + {"state" "NY" "quantity" 1 "price" 299.00} + {"state" "IL" "quantity" 2 "price" 11.50 } + {"state" "CA" "quantity" 2 "price" 2.95 } + {"state" "IL" "quantity" 3 "price" 5.50 }] + expected #{{"quantity" 1 "state" "CA"} + {"quantity" 2 "state" "NY"} + {"quantity" 1 "state" "NY"} + {"quantity" 2 "state" "IL"} + {"quantity" 2 "state" "CA"} + {"quantity" 3 "state" "IL"}}] + (mc/insert-batch db coll batch) + (is (= 6 (mc/count db coll))) + (let [result (->> + (mc/aggregate db coll [{$project {"state" 1 "quantity" 1}}] :keywordize false) + (map #(select-keys % ["state" "quantity"])) + (set))] + (is (= expected result))))) + (deftest test-basic-single-stage-$project-aggregation (let [batch [{:state "CA" :quantity 1 :price 199.00} {:state "NY" :quantity 2 :price 199.00} From da520112e7a42bc626929524931d2c2b0627adaa Mon Sep 17 00:00:00 2001 From: Ethan McCue Date: Sat, 21 Jul 2018 00:26:09 -0400 Subject: [PATCH 11/11] Time passes. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f906dc..7b717aa 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ wanted a client that will ## Project Maturity -Monger is not a young project: started in July 2011, it is over 3 +Monger is not a young project: started in July 2011, it is over 7 years old with active production use from week 1.