From 9452862f0cd4cefc0edd506f5f7713162efdf64a Mon Sep 17 00:00:00 2001 From: "Michael S. Klishin" Date: Wed, 11 Jul 2012 23:12:23 +0400 Subject: [PATCH] Support bitmask DBCursor options, fixes #35 --- ChangeLog.md | 13 +++++++++++++ src/clojure/monger/query.clj | 8 +++++++- test/monger/test/querying_test.clj | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 5e3bb61..2f0b6dc 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,5 +1,18 @@ ## Changes between 1.1.0 and 1.2.0-alpha1 +### Monger Query DSL now supports low level options on cursors + +For example: + +``` clojure +(with-collection coll + (find {}) + (paginate :page 1 :per-page 3) + (sort { :title 1 }) + (read-preference ReadPreference/PRIMARY) + (options com.mongodb.Bytes/QUERYOPTION_NOTIMEOUT)) +``` + ### monger.collection/insert-and-return no longer forcefully replaces existing document id `monger.collection/insert-and-return` now preserves existing document ids, just like `monger.collection/save-and-return` does. diff --git a/src/clojure/monger/query.clj b/src/clojure/monger/query.clj index c51fcf7..6ef4392 100644 --- a/src/clojure/monger/query.clj +++ b/src/clojure/monger/query.clj @@ -63,7 +63,7 @@ (merge (empty-query) { :collection coll }))) (defn exec - [{ :keys [^DBCollection collection query fields skip limit sort batch-size hint snapshot read-preference keywordize-fields] :or { limit 0 batch-size 256 skip 0 } }] + [{ :keys [^DBCollection collection query fields skip limit sort batch-size hint snapshot read-preference keywordize-fields options] :or { limit 0 batch-size 256 skip 0 } }] (let [cursor (doto (.find collection (to-db-object query) (as-field-selector fields)) (.limit limit) (.skip skip) @@ -74,6 +74,8 @@ (.snapshot cursor)) (when read-preference (.setReadPreference cursor read-preference)) + (when options + (.setOptions cursor options)) (map (fn [x] (from-db-object x keywordize-fields)) cursor))) @@ -117,6 +119,10 @@ [m ^ReadPreference rp] (merge m { :read-preference rp })) +(defn options + [m opts] + (merge m { :options opts })) + (defn keywordize-fields [m bool] (merge m { :keywordize-fields bool })) diff --git a/test/monger/test/querying_test.clj b/test/monger/test/querying_test.clj index 9573072..d5cdebf 100644 --- a/test/monger/test/querying_test.clj +++ b/test/monger/test/querying_test.clj @@ -231,7 +231,8 @@ (find {}) (paginate :page 1 :per-page 3) (sort { :title 1 }) - (read-preference ReadPreference/PRIMARY)) + (read-preference ReadPreference/PRIMARY) + (options com.mongodb.Bytes/QUERYOPTION_NOTIMEOUT)) result2 (with-collection coll (find {}) (paginate :page 2 :per-page 3)