# bson_append_document_begin()

## Synopsis

    #define BSON_APPEND_DOCUMENT_BEGIN(b, key, child) \
       bson_append_document_begin (b, key, (int) strlen (key), child)

    bool
    bson_append_document_begin (bson_t *bson,
                                const char *key,
                                int key_length,
                                bson_t *child);

## Parameters

- `bson`: A bson_t.

- `key`: An ASCII C string containing the name of the field.

- `key_length`: The length of `key` in bytes, or -1 to determine the length with `strlen()`.

- `child`: An uninitialized bson_t to be initialized as the sub-document.

## Description

The bson_append_document_begin() function shall begin appending a sub-document to `bson`. Use `child` to add fields to the sub-document. When completed, call bson_append_document_end() to complete the element.

`child` MUST be an uninitialized bson_t to avoid leaking memory.

## Returns

Returns `true` if the operation was applied successfully. The function will fail if `bson` must grow larger than INT32_MAX.