https://github.com/stroiman/bs-mongodb
Bucklescript bindings to node mongodb driver
https://github.com/stroiman/bs-mongodb
Last synced: 8 months ago
JSON representation
Bucklescript bindings to node mongodb driver
- Host: GitHub
- URL: https://github.com/stroiman/bs-mongodb
- Owner: stroiman
- License: mit
- Created: 2017-11-22T18:38:48.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-04-13T15:34:24.000Z (over 7 years ago)
- Last Synced: 2024-10-08T14:13:22.242Z (over 1 year ago)
- Language: OCaml
- Size: 48.8 KB
- Stars: 13
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - bs-mongodb
README
# MongoDB bindings for bucklescript
[](https://travis-ci.org/PeteProgrammer/bs-mongodb)
This library contains preliminary bindings to MongoDB. There is very little
documentation yet, and far from all features are implemented.
This library is need-driven, I am adding bindings as I need them. If you add
bindings to this, feel free to send me a pull request.
## Future breaking change - be aware
When I first created the `Collection.createIndex` function, I needed to pass
options. But it didn't occur to me then, that the options should be optional. So
in a future version, the options will be passed as an optional argument.
Currently there is a `Collection.createIndexNoOpts` for a no-options call.
## Handling Async code
The mongo driver is inherently async, every result is either provided to a
callback, or delivered in a Promise. I personally use the callbacks with [my own
async handling library](https://github.com/PeteProgrammer/resync).
But I didn't want to push a specific async library upon any users of this
library, so in order to use the library, you construct the module through a
functor, that takes a `CallbackHandler` as argument.
This piece of code is from my project where I bind the mongo library to my async
library.
```
include MongoDB;
module AsyncHandler : CallbackHandler with type t('a) = Async.t('a) = {
type t('a) = Async.t('a);
let callbackConverter = (x:callback('a)) : Async.t('a) => x |> Async.from_js;
};
include Make(AsyncHandler);
```
If you prefer to use a `(Js.Result.t('a,MongoError.t) => unit) => unit`, you can
do so. I might get some examples up.
And I will try to see if I can get it to work with Promises, for those who
prefer this route (the underlying node library returns a promise, if no callback
is passed to the aync functions).