Commit graph

360 commits

Author SHA1 Message Date
Michael S. Klishin
3c813132d8 Return type of monger.conversion/to-db-object is always the same, hint it 2011-12-31 06:44:34 +04:00
Michael S. Klishin
f3efbcec16 One more query DSL composition example, introduce monger.query/partial-query 2011-12-31 04:25:26 +04:00
Michael S. Klishin
8300b7c0c4 Eliminate compiler warning 2011-12-31 04:24:27 +04:00
Michael S. Klishin
1cb024dcad Add read preference support for monger.query DSL 2011-12-30 17:19:44 +04:00
Michael S. Klishin
c25609a5c3 monger.conversion/to-object-id 2011-12-28 19:46:47 +04:00
Oleksandr Petrov
1a8eb1ef80 Added docs, improved test suite.
Removed (seq) method call from find-maps, since DBCursor implements Iterable interface. 
Added empty? method for collection.
2011-12-23 11:56:14 +01:00
Michael S. Klishin
57c4ad6e9b Switch to clojure.java.io/resource here 2011-12-16 11:12:55 +04:00
Michael S. Klishin
f49e272f9f Introduce monger.testing/defcleaner that supposed to be used with clojure.test/use-fixtures 2011-12-16 07:18:16 +04:00
Oleksandr Petrov
e6f81e52a7 Merge branch 'master' of https://github.com/michaelklishin/monger 2011-12-03 18:40:52 +01:00
Oleksandr Petrov
16d02800d3 Commenting code, adding docs. 2011-12-03 18:39:17 +01:00
Oleksandr Petrov
611d9666bd Added get-write-concern function. 2011-12-03 18:39:02 +01:00
Oleksandr Petrov
f2a5786ad4 Adding some docs. 2011-11-30 22:07:40 +01:00
Michael S. Klishin
8127d26442 Fix monger.util/get-id for persistent maps with string keys 2011-11-29 15:44:55 +04:00
Michael S. Klishin
be06397849 Introduce monger.collection/any?
Useful for detecting duplicate documents and so on
2011-11-28 20:12:19 +04:00
Oleksandr Petrov
578673a058 Writing docs 2011-11-25 17:58:35 +01:00
Oleksandr Petrov
1124316793 Adding some docs for operators. 2011-11-25 17:33:23 +01:00
Oleksandr Petrov
9664961120 Adding some docs to querying. 2011-11-19 23:41:36 +01:00
Michael S. Klishin
d9f5ae5951 Move pagination helper to monger.internal.pagination 2011-11-15 03:48:31 +04:00
Michael S. Klishin
3534e579b7 Add pagination support to monger.query DSL
An example:

(with-collection coll
                  (find {})
                  (paginate :page 1 :per-page 3)
                  (sort { :title 1 }))
2011-11-15 03:44:19 +04:00
Michael S. Klishin
0536244dce Merge branch 'master' into query-dsl
Conflicts:
	src/monger/operators.clj
2011-11-14 15:23:47 +04:00
Michael S. Klishin
bd133c1afc Initial version of the monger.query DSL
Here is what it looks like:

(with-collection "docs"
  (find { :inception_year { $lt 2000 $gte 2011 } })
  (fields { :inception_year 1 :name 1 })
  (skip 10)
  (limit 20)
  (batch-size 50)
  (hint "my-index-name")
  (snapshot))
2011-11-14 15:15:43 +04:00
Michael S. Klishin
c40b0e25c1 Simplify defoperator 2011-11-12 20:46:34 +04:00
Michael S. Klishin
0b242f9586 Add operator 2011-11-12 20:33:02 +04:00
Oleksandr Petrov
047d5b6a88 Separating operators to Logical Operators, Query Operators and Atomic Modifiers.
Adding docs to most of operators (still TBC), giving more examples, improving test suite.
2011-11-11 18:55:43 +01:00
Oleksandr Petrov
df12686708 Making defoperator private by default 2011-11-11 18:54:11 +01:00
Michael S. Klishin
c109702117 Rewort $operator macros to evaluate to strings and not functions
Unlike Casbah and Korma, we already use query language data structures as close to what MongoDB uses as possible
(Clojure maps, vectors, numerics and strings are effectively JSON) so we don't need any layers on top, they won't improve
anything.

Having these operators is nice beacuse if you use atomic operators a lot, this will make sure Clojure compiler catches
typos for you. It is completely opt-in, however.

Finally, having a function inserted carries certain runtime performance cost and having $operator macros
that evaluate to themselves does not.

Per discussion with Alex.
2011-11-09 12:40:22 +04:00
Oleksandr Petrov
bb169d3ae3 Adding operators DSL in order to use Clojure functions instead of hashes.
Casbah has a similar concept called Bareword Operators.
Korma uses operators a bit differently, but idea is quite same, too. 

One of the obvious advantages is that you can make sure you didn't screw make a typo 
in operator name during compile-time. Plus, we can guarantee that there is a subset
of used / supported operators, and add them gradually, keeping track of them in one place, 
which will simplify tests, too.
2011-11-08 00:12:10 +01:00
Michael S. Klishin
758fb9e7e6 Support skip & limit for monger.collection/find and /find-maps
As test example demonstrates, closely following DBCollection and DBCursor API has one downside:
queries that use sorting look really ugly. So monger needs to come up with a DSL  la Casbah or SQLKorma
to make this really nice.
2011-11-05 09:45:54 +04:00
Michael S. Klishin
20c271eee5 A typo 2011-11-05 08:31:46 +04:00
Michael S. Klishin
746d83459e Rename function that sets *default* write concern 2011-10-18 18:11:51 +04:00
Michael S. Klishin
fbd00ee151 Use WriteConcern/SAFE by default
WriteConcern/NORMAL is ridiculously dangerous and most apps simply do not have performance
requirements to justify completely ignoring server responses.
2011-10-18 17:50:28 +04:00
Oleksandr Petrov
edbaec0a3b Merge branch 'master' of https://github.com/michaelklishin/monger 2011-10-16 16:04:55 +02:00
Oleksandr Petrov
1dc94ae351 Adding some docs for indexing. 2011-10-16 16:04:51 +02:00
Oleksandr Petrov
410ef23b03 Adding some docs and minor tests for monger.core/command. 2011-10-16 15:39:21 +02:00
Michael S. Klishin
4336b6f414 Introduce monger.js/load-resource, a helper that loads JS files from the classpath
Yes, to be used with map/reduce and so on.
2011-10-16 15:54:53 +04:00
Michael S. Klishin
3963808152 Introduce monger.collection/distinct 2011-10-16 14:19:04 +04:00
Michael S. Klishin
c62c433559 Initial map/reduce support 2011-10-14 22:18:35 +04:00
Michael S. Klishin
7d79866eff To serialize joda.time.DateTime to JSON, use ISO date time format 2011-10-14 01:01:40 +04:00
Michael S. Klishin
8b22e9eef1 Extend JodaTime integration
This is not perfect since it currently ignores output writer paramter
and assumes clojure.data.json but it is a significantly better choice than
forcing every clojure.data.json user to use JodaTime.
2011-10-13 23:47:36 +04:00
Michael S. Klishin
cae818f646 Add (optional) conversion protocol extension to support Joda Time types
Much like we already do with clojure.data.json.
2011-10-13 18:04:49 +04:00
Michael S. Klishin
d966fabd3e Clean up 2011-10-13 18:03:53 +04:00
Oleksandr Petrov
75d52331bf Adding some docs and tests to collection. 2011-10-11 18:55:40 +02:00
Michael S. Klishin
886a270bf9 Introduce monger.collection/find-seq
For cases when you do not want to work with DBCursors but also
do not need conversion to maps that monger.collection/find-maps does.
2011-10-08 12:08:26 +04:00
Michael S. Klishin
74dcd77092 Use "new style" type hints 2011-10-08 03:48:46 +04:00
Michael S. Klishin
c875883534 declare vars that are initially unbound 2011-09-19 12:34:10 +04:00
Michael S. Klishin
c5850bd59f Get rid of monger.util/with-ns
It was an awful hack, now replaced by a less awful one.
2011-09-19 12:31:29 +04:00
Michael S. Klishin
189d2366ab Hm, yeah 2011-09-19 12:29:22 +04:00
Michael S. Klishin
2673c5bc0f Add monger.core/with-connection and monger.core/with-db 2011-09-19 12:18:07 +04:00
Michael S. Klishin
5e12f9aec2 Introduce monger.core/connect! and monger.core/set-db!
Even though it is not idiomatic Clojure to mutate vars like this,
it is very common for many applications to only use one MongoDB
connection (so, no per-thread var rebinding) and one main database.

For those cases, these function eliminate the need for mundaine
hacks with namespace switching.
2011-09-19 12:14:48 +04:00
Michael S. Klishin
3e6a6fac44 Simplify finders that use document id 2011-09-14 14:11:56 +04:00
Michael S. Klishin
3e8e5d7b32 Don't assume id is a string (most of the time it is not) 2011-09-14 14:01:20 +04:00
Michael S. Klishin
ec84824334 Correct documentation examples 2011-09-12 10:37:24 +04:00
Michael S. Klishin
57d8e62058 monger.util/get-id now can also handle Clojure maps, using both :_id and "_id" as id keys 2011-09-11 23:16:36 +04:00
Michael S. Klishin
6d12e34465 monger.convertion => monger.conversion 2011-09-11 23:02:46 +04:00
Oleksandr Petrov
30ed15e67f Adding docs for major collection methods. 2011-09-11 16:13:29 +02:00
Oleksandr Petrov
5a94424402 Adding monger.utils/get-id protocol extension for DBObject. 2011-09-11 16:13:14 +02:00
Oleksandr Petrov
25a24a5231 Adding basic operations documentation 2011-09-11 14:40:46 +02:00
Michael S. Klishin
1ea892328f Use "new style" type hints 2011-09-11 11:11:02 +04:00
Michael S. Klishin
a63fc0fadd Add license header 2011-09-11 11:10:42 +04:00
Michael S. Klishin
63d8e0848f Blow the dust off monger.core 2011-09-10 20:41:23 +04:00
Michael S. Klishin
fadf939cd5 Implement monger.collection/rename 2011-09-10 08:46:17 +04:00
Michael S. Klishin
e681bf1a1c Implement monger.core/command 2011-09-10 08:46:10 +04:00
Michael S. Klishin
1f091ab735 Implement monger.collection/create 2011-09-10 08:19:19 +04:00
Michael S. Klishin
24b2dbe516 Implement monger.collection/exists? and monger.collection/drop 2011-09-10 08:09:32 +04:00
Michael S. Klishin
1f9b611003 update-multi is not really worth having, monger.collection/date with the :multi option is good enough 2011-09-10 07:46:41 +04:00
Michael S. Klishin
b90834fdc5 Implement index operations 2011-09-10 07:45:47 +04:00
Michael S. Klishin
60e93b4275 Eliminate a reflection warning 2011-09-09 06:58:57 +04:00
Michael S. Klishin
1a9e0715cd Don't refer to clojure.core functions monger.collection and monger.core replace 2011-09-09 06:57:01 +04:00
Michael S. Klishin
4124b033f6 Cosmetics 2011-09-04 04:55:06 +04:00
Michael S. Klishin
c29748e46c Add monger.json that extends clojure.data.json.Write-JSON protocol to handle org.bson.types.ObjectId 2011-09-04 00:49:47 +04:00
Michael S. Klishin
4700213bd5 Introduce monger.collection/find-maps 2011-09-03 18:31:26 +04:00
Michael S. Klishin
a670b31462 Introduce monger.collection/find-map-by-id 2011-09-03 01:02:46 +04:00
Michael S. Klishin
6d17366bdd Nuke some reflection warnings 2011-09-02 04:08:39 +04:00
Michael S. Klishin
7e29ff457d Introduce monger.collection/find-one-as-map 2011-09-02 04:08:31 +04:00
Michael S. Klishin
f8845111f2 Make monger.collection/find-one return a DBObject, not a cursor 2011-09-02 03:28:40 +04:00
Michael S. Klishin
be1355b5b9 Add specialized identity convertion of DBObjects, makes it very easy to insert an object and immediately fetch its _id from it 2011-09-02 03:10:18 +04:00
Michael S. Klishin
2ff340ab08 Implement monger.result.MongoCommandResult/updated-existing? 2011-09-01 22:29:46 +04:00
Michael S. Klishin
8fdfe32ccb monger.errors => monger.result, extend MongoCommandResult protocol with has-error? 2011-09-01 22:16:29 +04:00
Michael S. Klishin
21119e80db Add utility function that generates BSON object ids 2011-08-31 16:49:35 +04:00
Michael S. Klishin
1ee5436841 Initial implementation of monger.collection/find-one 2011-08-29 19:36:11 +04:00
Michael S. Klishin
1fd3cc719f Correct invalid type hints 2011-08-28 22:37:35 +04:00
Michael S. Klishin
58d4a1eff4 Eliminate some reflection warnings 2011-08-27 23:41:21 +04:00
Michael S. Klishin
861be36c54 Implement monger.collection/save 2011-08-16 11:36:52 +04:00
Michael S. Klishin
79e3f8ad20 Implement monger.collection/update 2011-08-16 01:36:06 +04:00
Michael S. Klishin
b3d82ce3a2 Add monger.collection/count version that takes conditions argument 2011-08-16 00:06:40 +04:00
Michael S. Klishin
8bd4378f93 Introduce monger.core/Countable protocol 2011-08-15 01:43:02 +04:00
Michael S. Klishin
1bba60418e Use random-uuid here 2011-08-15 01:38:11 +04:00
Michael S. Klishin
f096c032cd Implement fetching of partial documents 2011-08-15 01:09:25 +04:00
Michael S. Klishin
b8b255545a Cosmetics 2011-08-15 00:25:51 +04:00
Michael S. Klishin
1c71375b16 Extract function 2011-08-15 00:25:12 +04:00
Michael S. Klishin
f8686896f5 Support partial documents for monger.collection/find 2011-08-15 00:22:12 +04:00
Michael S. Klishin
228a1b256c Extract 2 variables 2011-08-15 00:20:21 +04:00
Michael S. Klishin
5a546e68d0 Minor cleanup 2011-08-14 22:57:53 +04:00
Michael S. Klishin
7b987ed8af Update license headers to be EPL, not MIT 2011-08-14 22:37:06 +04:00
Michael S. Klishin
90daa7c967 Implement partial document fetching for monger.collection/find-by-id 2011-08-14 22:36:54 +04:00
Michael S. Klishin
2620263103 Switch to *mongodb-connection* and *mongodb-database* instead of explicitly passing values around 2011-08-14 22:19:44 +04:00
Michael S. Klishin
11ad2168ed Initial bits of monger.collection/find and monger.collection/find-by-id 2011-08-14 08:03:29 +04:00
Michael S. Klishin
3bf2284611 Initial implementation of inserts with write concerns and batch inserts 2011-08-14 06:51:14 +04:00
Michael S. Klishin
97f537d176 Apparently MongoDB returns "ok" as 1.0 2011-08-14 05:15:46 +04:00
Michael S. Klishin
a073d7ed20 Introduce monger.errors.ok? 2011-08-14 03:56:31 +04:00
Michael S. Klishin
a3aa236655 Add license headers, give credit to Andrew Boekhoff for the congomongo coercion/convertion code I based monger.convertion on 2011-08-14 02:18:27 +04:00
Michael S. Klishin
bef972d1ab Wrapping up with monger.convertion.ConvertFromDBObject 2011-08-14 02:15:38 +04:00
Michael S. Klishin
3a431bf1e0 Implement most of monger.convertion.ConvertFromDBObject 2011-08-13 21:18:21 +04:00
Michael S. Klishin
b38b357f50 Support java.util.List convertion 2011-08-13 07:36:44 +04:00
Michael S. Klishin
bc8fccf429 Further work on monger.convertion protocols 2011-08-13 07:30:54 +04:00
Michael S. Klishin
6c0eb8f1e0 Initial monger.convertion.* protocols work 2011-08-12 21:48:08 +04:00
Michael S. Klishin
eb3b76f05a Outline monger.collection API 2011-08-04 18:33:52 +04:00
Michael S. Klishin
8ee5b8f717 Introduce monger.collection/count 2011-08-04 18:06:13 +04:00
Michael S. Klishin
1299aecb3a Implement monger.core/connect and monger.core/get-db 2011-08-04 17:44:31 +04:00
Michael S. Klishin
c70074a3ed Initial Leiningen project structure 2011-08-04 16:01:50 +04:00