From all the resources I found about type hinting in macros,
it doesn't work like it does for normal functions.
I got reflection warnings for a code like this:
```clj
(let [conn (mg/connect)
db (delay (mg/get-db conn "monger-test"))]
(with-collection @db "something"
(find {})))
```
The type hint for `db` didn't work. Actually the type hint that works
comes from the function `core/get-db` and we see this when we remove
`delay` from the code above. As we could expect, the function `deref`
doesn't propagate the type hint.
I did similar tests with the collection name and no reflection warning
was raised for any case. In addition, it looked weird for me to have
a type hint like `^String` and then a checking like `string?` later.
Some references:
* http://stackoverflow.com/questions/11919602/generating-clojure-code-with-type-hints
* Clojure High Performance Programming, page 44.
Reimplement aggregate on top of the Java driver's DBCollection#aggregate
in order to return a cursor for the results. This allows users to
overcome the 16MB result size limit and specify the cursor batch size.
The allowDiskUse can also be passed to Mongo, through the allow-disk-use
key. The maxTime option enables setting a limit (in milliseconds) on the
execution time of the query, through the max-time key.
named `name` shadowed clojure.core/name, so trying to call `name`
as a function on line 426 throws an exception. Fixes the bug by
renaming the argument to `index-name`.
core/connect ignores :uri key and tries to connect 127.0.0.1:27017 instead.
Patch fix this behaviour by checking uri key existance and trying to connect
by uri if it's provided.