BSON NIF for Elixir language http://bsonspec.org
This library has taken many great ideas and codes from Jiffy to make it fasting and flexible.
The API of elixir-cbson is the same as elixir-bson which I always used in my projects.
- At this moment, elixir-cbson only supports Little-endian machine and I will improve it sometime.
- Only support Elixir 1.1.0+
The MongodB driver using this project is here, being changed from elixir-mongo.
CBson.decode(iodata)CBson.decode(iodata, options)
The options for decode are:
:return_lists- Return objects using the lists data(keywrods) type.:return_atom- Return objects using atom keys instead of string. The internal implementation is using String.to_existing_atom/1, if convertion failed, the string key returned.{:nil_term, term}- Returns the specifiedterminstead ofnilwhen decoding BSON. This is for people that wish to useundefinedinstead ofnil.:use_null- Returns the atomnullinstead ofnilwhen decoding BSON. This is a short hand for{nil_term, null}.:return_josn- Returns objects convertedObjectId,UTC,Bin,RegexandTimestampto suitable types for easier convert to json:return_trailer- If any data is found after the first BSON term is decoded the return value of decode/2 becomes{:has_trailer, first_term, rest_data::iodata()}. This is useful to decode multiple terms in a single binary.{:bytes_per_red, n}where n >= 0 - This controls the number of bytes that elixir-cbson will process as an equivalent to a reduction. Each 20 reductions we consume 1% of our allocated time slice for the current process. When the Erlang VM indicates we need to return from the NIF.
CBson.encode(bson_doc)CBson.encode(bson_doc, options)
The options for encode are:
force_utf8- Force strings to encode as UTF-8 by fixing broken surrogate pairs and/or using the replacement character to remove broken UTF-8 sequences in data.{:nil_term, term}- Returns the specifiedterminstead ofnilwhen decoding BSON. This is for people that wish to useundefinedinstead ofnil.:use_null- Returns the atomnullinstead ofnilwhen decoding BSON. This is a short hand for{nil_term, null}.{:bytes_per_red, n}- Refer to the decode options
| BSON Type | Elixir Type | Notes |
|---|---|---|
| ObjectId | %Bson.ObjectId{} | |
| double | double | |
| string | string | |
| doc | map or keywords | :return_lists |
| array | list | |
| binary | %Bson.Bin{} | |
| bool | atom: true/false | |
| datetime | %Bson.UTC{} | |
| Null | nil | :use_null/:nil_term |
| Regex | %Bson.Regex{} | |
| JavaScript | not supported | |
| int32 | integer | |
| Timestamp | %Bson.Timestamp{} | |
| int64 | integer | |
| Min key | atom: min_key | |
| Max key | atom: max_key |
There're some benchmark cases vs mongodb & elixir-bson
MIX_ENV=bench mix bench