fb2f09171a
Turns out that order is sometimes important for BSON documents. Case in point, "mapreduce" has to be the first field for the map/reduce command. To accomidate this we'll switch from using 'Map' to using a tuple-list (eg '[(L8.ByteString, BsonValue)]'). Luckily most code that was using toBsonDoc doesn't need to change. While at it, 'Convertible' is not adding much value, and was causing ambiguities making it less usefull (was requiring explicit type hints more then it should have). Thus we are switching to our own conversion typeclasses.
105 lines
2.6 KiB
Text
105 lines
2.6 KiB
Text
TODO
|
|
====
|
|
|
|
BSON
|
|
----
|
|
+ on insert/update: reject keys that start with "$" or "."
|
|
+ data support for common mongo "$symbols"
|
|
+ convert from/to json
|
|
+ tie in with native regex like python does?
|
|
- on outgoing uncompile?
|
|
- on incoming automatically compile
|
|
+ more time convertibles
|
|
+ map operations for BsonDoc (or should it be applicative?)
|
|
|
|
MongoDB
|
|
-------
|
|
+ support full level 0
|
|
- handle query errors
|
|
- hint, explain, $where
|
|
- database profiling: set/get profiling level, get profiling info
|
|
- pair mode connection
|
|
- handle defunct servers
|
|
- connection fail over
|
|
- operations on database objects
|
|
* getName
|
|
* getCollection
|
|
* add_son_manipulators
|
|
* dereference (dbref)
|
|
* error
|
|
* eval
|
|
* last_status
|
|
* reset_error_history
|
|
- database admin
|
|
* getAdmin
|
|
* getProfilingLevel
|
|
* setProfilingLevel
|
|
* getProfilingInfo
|
|
- collection
|
|
* modify
|
|
* replace
|
|
* repsert
|
|
- index operations
|
|
* ensureIndex / index existance caching
|
|
- misc operations
|
|
* explain
|
|
* getOptions
|
|
* getName
|
|
* close
|
|
* group
|
|
* distinct
|
|
- cursor object
|
|
* hasMore
|
|
|
|
orderby (sort)
|
|
|
|
optional:
|
|
- automatic reconnection
|
|
- buffer pooling
|
|
- advanced connection management (master-server, replica pair)
|
|
- Tailable cursor support
|
|
+ support safe operations
|
|
+ auto-reconnection
|
|
+ auto-destoy connection (how?/when?)
|
|
+ pymongo returns the new ObjectId(s) on insert
|
|
+ don't read into cursor until needed, but have cursor send getMore before
|
|
it is actually out of docs (so network is finished by the time we're ready
|
|
to consume more)
|
|
+ support a LIMITed quickFind
|
|
|
|
Misc
|
|
----
|
|
+ learn more about haskelldb, anything we can learn from there
|
|
+ go through pymongo api and figure out what parts to adopt (also look
|
|
at other languages?)
|
|
- database_names()
|
|
- collection_names()
|
|
+ support for aggricated commands like listing collections
|
|
+ kill prefix on data types "eg QO_*"?
|
|
+ javascript
|
|
+ tailable cursor support
|
|
- only close cursor when cursorID is 0
|
|
- have to create loop that sleeps and retries
|
|
- lazy list support
|
|
+ error handling?
|
|
+ concurrency (share connection?)
|
|
+ is there a garbage collector hook that will let us free cursors and connections?
|
|
|
|
Tests?
|
|
Documentation
|
|
- ref
|
|
|
|
GridFS
|
|
|
|
|
|
pretty printer
|
|
deep "lookup" function (other deep Map functions?)
|
|
how to make bytestrings less painful
|
|
custom Show/Read instance that looks more like json
|
|
make sure NULLs aren't in created table names
|
|
|
|
update tutorial to match new python one
|
|
|
|
+ custom types (see python examples)
|
|
+ support array conversions again
|
|
+ better type conversion errors
|