Provided by: libbson-doc_1.3.1-1_all bug

NAME

       Creating_a_BSON_Document - None

THE BSON_T STRUCTURE

       BSON  documents  are  created using the bson_t structure. This structure encapsulates the necessary logic
       for encoding using the BSON Specification \&. At the core, bson_t is a buffer manager and set of encoding
       routines.

       NOTE
              BSON documents can live on the stack or the heap based on the performance needs or  preference  of
              the consumer.

       Let's  start by creating a new BSON document on the stack. Whenever using libbson, make sure you #include
       <bson.h> \&.

       This creates an empty document. In JSON, this would be the same as {} \&.

       We can now proceed to  adding  items  to  the  BSON  document.  A  variety  of  functions  prefixed  with
       bson_append_  can  be  used  based  on the type of field you want to append. Let's append a UTF‐8 encoded
       string.

       Notice the two ‐1 parameters. The first indicates that the length of key in bytes  should  be  determined
       with strlen(3) \&. Alternatively, we could have passed the number 3 \&. The same goes for the second ‐1 ,
       but for value \&.

       Libbson  provides  macros to make this less tedious when using string literals. The following two appends
       are identical.

       Now let's take a look at an example that adds a few different field types to a BSON document.

       Notice that we ommitted the call to bson_init(3) \&. By specifying BSON_INITIALIZER  we  can  remove  the
       need to initialize the structure to a base state.

SUB‐DOCUMENTS AND SUB‐ARRAYS

       To   simplify   the   creation   of   sub‐documents   and   arrays,   bson_append_document_begin(3)   and
       bson_append_array_begin(3) exist. These can be used to build a sub‐document using  the  parent  documents
       memory region as the destination buffer.

       bson_t parent;
       bson_t child;
       char *str;

       bson_init (&parent);
       bson_append_document_begin (&parent, "foo", 3, &child);
       bson_append_int32 (&child, "baz", 3, 1);
       bson_append_document_end (&parent, &child);

       str = bson_as_json (&parent, NULL);
       printf ("%s\n", str);
       bson_free (str);

       bson_destroy (&parent);
       { foo : { baz : 1 } }

SIMPLIFIED BSON C OBJECT NOTATION

       Creating  BSON  documents by hand can be tedious and time consuming. BCON, or BSON C Object Notation, was
       added to allow for the creation of BSON documents in a  format  that  looks  closer  to  the  destination
       format.

       The  following  example  shows  the  use of BCON. Notice that values for fields are wrapped in the BCON_*
       macros. These are required for the variadic processor to determine the parameter type.

       bson_t *doc;

       doc = BCON_NEW ("foo", "{",
          "int", BCON_INT32 (1),
          "array", "[", BCON_INT32 (100), "{", "sub", BCON_UTF8 ("value"), "}", "]",
       "}");
       Creates the following document { foo : { int : 1, array : [ 100, { sub : value } ] } }

COLOPHON

       This page is part of libbson.  Please report any bugs at https://jira.mongodb.org/browse/CDRIVER.

libbson                                            2016‐01‐18                        CREATING_A_BSON_DOCUMENT(3)