Add support for index options + unique indexes for monger.collection/ensure-index and monger.collection/create-index

This commit is contained in:
Michael S. Klishin 2012-04-03 16:42:48 +04:00
parent 576f264e97
commit 0530b165f6
5 changed files with 28 additions and 10 deletions

View file

@ -1,5 +1,11 @@
## Changes between 1.0.0-beta2 and 1.0.0-beta3
### Index Options support for monger.collection/ensure-index and /create-index
`monger.collection/ensure-index` and `/create-index` now accept index options as additional argument.
**Breaking change**: 3-arity versions of those functions now become 4-arity versions.
### Support serialization of Clojure ratios
Documents that contain Clojure ratios (for example, `26/5`) now can be converted to DBObject instances

View file

@ -5,7 +5,11 @@
:dependencies [[org.clojure/clojure "1.3.0"]
[org.mongodb/mongo-java-driver "2.7.3"]
[com.novemberain/validateur "1.0.0"]]
:test-selectors {:focus (fn [v] (:focus v))}
:test-selectors {:default (complement :performance)
:focus :focus
:indexing :indexing
:performance :performance
:all (constantly true)}
:codox {:exclude [monger.internal.pagination]}
:mailing-list {:name "clojure-monger",
:archive "https://groups.google.com/group/clojure-monger",

View file

@ -388,16 +388,20 @@
EXAMPLES
;; Will create an index on \"language\" field
;; Will create an index on the \"language\" field
(monger.collection/create-index collection { \"language\" 1 })
(monger.collection/create-index collection { \"language\" 1 } { :unique true :name \"unique_language\" })
"
([^String collection ^Map keys]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)]
(.createIndex coll (to-db-object keys))))
([^DB db ^String collection ^Map keys]
([^String collection ^Map keys options]
(let [^DBCollection coll (.getCollection monger.core/*mongodb-database* collection)]
(.createIndex coll (to-db-object keys) (to-db-object options))))
([^DB db ^String collection ^Map keys ^Map options]
(let [^DBCollection coll (.getCollection db collection)]
(.createIndex coll (to-db-object keys)))))
(.createIndex coll (to-db-object keys) (to-db-object options)))))
;;
@ -416,9 +420,12 @@
([^String collection, ^Map keys]
(let [coll ^DBCollection (.getCollection monger.core/*mongodb-database* collection)]
(.ensureIndex ^DBCollection coll ^DBObject (to-db-object keys))))
([^String collection, ^Map keys, ^String name]
([^String collection, ^Map keys ^Map options]
(let [coll ^DBCollection (.getCollection monger.core/*mongodb-database* collection)]
(.ensureIndex coll ^DBObject (to-db-object keys) ^String name))))
(.ensureIndex ^DBCollection coll ^DBObject (to-db-object keys) (to-db-object options))))
([^String collection ^Map keys ^String name ^Boolean unique?]
(let [coll ^DBCollection (.getCollection monger.core/*mongodb-database* collection)]
(.ensureIndex coll ^DBObject (to-db-object keys) ^String name unique?))))
;;

View file

@ -75,7 +75,7 @@
;; indexes
;;
(deftest index-operations
(deftest ^{:indexing true} index-operations
(let [collection "libraries"]
(mgcol/drop-indexes collection)
(is (= "_id_"
@ -86,10 +86,11 @@
(:name (second (mgcol/indexes-on collection)))))
(mgcol/drop-index collection "language_1")
(is (nil? (second (mgcol/indexes-on collection))))
(mgcol/ensure-index collection { "language" 1 })
(mgcol/ensure-index collection { "language" 1 } {:unique true})
(is (= "language_1"
(:name (second (mgcol/indexes-on collection)))))
(mgcol/ensure-index collection { "language" 1 })))
(mgcol/ensure-index collection { "language" 1 })
(mgcol/ensure-index collection { "language" 1 } { :unique true })))
;;

View file

@ -30,7 +30,7 @@
(monger.core/set-default-write-concern! WriteConcern/NORMAL)
(deftest insert-large-batches-of-documents-without-object-ids
(deftest ^{:performance true} insert-large-batches-of-documents-without-object-ids
(doseq [n [1000 10000 100000]]
(let [collection "things"
docs (map (fn [i]