---
id: MongoDB
sidebar_class_name: MongoDB
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, MongoDB]
---

<img src={require('../../static/img/APIs/MongoDB.png').default} width='64px' />

# MongoDB

Этот раздел посвящен библиотеке для работы с базами данных MongoDB в 1С:Предприятие, OneScript и CLI. На данной странице описаны все действия, необходимые для полноценного начала работы

<div class="theme-admonition theme-admonition-info admonition_node_modules-@docusaurus-theme-classic-lib-theme-Admonition-Layout-styles-module alert alert--info">

<img src={require('../../static/img/addin.png').default} class="tipimage" />
<div class="addin">Для реализации некоторых функции в этой библиотеке используется внешняя компонента <br/>
Пожалуйста, ознакомьтесь с разделом ["О внешних компонентах"](/docs/Start/Component-requirements) перед началом работы</div>
</div>

## Создание соединения

При использовании любых функций данной библиотеки, в качестве первого шага, необходимо инициализировать соединение с сервером MongoDB. Для этого используется строка подключения следующего вида:

```
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
```

Данная строка может быть сформирована при помощи функции `СформироватьСтрокуПодключения` или быть получена из других источников. Далее, с ее помощью, соединение может быть инициализировано одним из следующих способов:

- **Явно** Объект соединения может быть создан явно при помощи функции `ОткрытьСоединение`. Данный объект может быть использован многократно при вызове нескольких функций работы с MongoDB, а само соединение является активным до тех пор, пока объект существует, не была вызвана функция `ЗакрытьСоединение` или соединение не было закрыто по другим внешним причинам

- **Неявно** Кроме передачи заранее созданного соединения, функции библиотеки также поддерживают передачу строки подключения в качестве параметра `Соединение`. При использовании такого подхода, соединение по указанной строке подключения будет автоматически создано внутри выполняемой функции и закрыто при ее завершении

При выполнении множественных последовательных запросов к серверу, рекомендуется использовать полноценное соединение, получаемое при помощи функции `ОткрытьСоединение`

## Приведение типов

MongoDB использует JSON-подобный формат документов, однако с гораздо более широким набором типов данных. Некоторые из этих типов, при выполнении операций с внесением значений, могут быть приведены механизмами библиотеки автоматически, основываясь на типах значений в рамках 1С/OneScript. К таким типам относятся:

| Тип 1С | Тип MongoDB (BSON) |
|-|-|
| Строка | String |
| Число (без дробной части) | Int64 |
| Число (с дробной частью) | Double |
| Булево | Boolean |
| Дата | DateTime |
| Массив | Array |
| Структура, Соответствие | Document |
| ДвоичныеДанные | Binary |
| Неопределено | Null |

Кроме автоматического приведения, тип значения при передаче может быть также указан явно. Для этого передаваемое значение необходимо обернуть в структуру, где Ключ - идентификатор типа, а Значение - непосредственно передаваемое значение данных. Список поддерживаемых типов и их ключи представлены в таблице ниже:

| Ключ структуры / объекта JSON | Тип MongoDB (BSON) |
|-|-|
| \_\_OPI_STRING\_\_ | String |
| \_\_OPI_INT32\_\_ | Int32 |
| \_\_OPI_INT64\_\_ | Int64 |
| \_\_OPI_DOUBLE\_\_ | Double |
| \_\_OPI_BOOLEAN\_\_ | Boolean |
| \_\_OPI_DATETIME\_\_ | DateTime |
| \_\_OPI_TIMESTAMP\_\_ | Timestamp |
| \_\_OPI_OBJECTID\_\_ | ObjectID |
| \_\_OPI_REGEXP\_\_ | RegularExpression |
| \_\_OPI_JS\_\_ | JavaScriptCode |
| \_\_OPI_SYMBOL\_\_ | Symbol |
| \_\_OPI_MINKEY\_\_ | MinKey |
| \_\_OPI_MAXKEY\_\_ | MaxKey |
| \_\_OPI_NULL\_\_ | Null |
| \_\_OPI_BINARY\_\_ | Binary |

Передаваемые значения с типами `Структура`, `Соответствие` и `Массив` не требуют указания типа и всегда приводятся как `Document` и `Array` соответственно

Более подробный пример с приведением типов при внесении данных можно найти в описании функции `ВставитьДокументы`

## Другие особенности

Для удобства работы, при разработке библиотеки также были заложены некоторые дополнительные особенности:

- Так как ключи структур в 1С не могут содержать спец. символы, часто используемый символ `$` может быть указан как `__4`

```bsl
    // __4 = $
    Выражение = Новый Структура("__4gte, __4lte", 100, 150); // $gte: 100, $lte: 150
    Фильтр    = Новый Структура("stringField,doubleField", "Текст", Выражение);
```

- Данные типа `Binary` при получении данных из MongoDB возвращаются как структуры вида `{"__B64_BINARY__": <Base64 строка значения>}`

- Данные типов `MaxKey` и `MinKey` при получении данных из MongoDB возвращаются как строки `<<MaxKey>>` и `<<MinKey>>` соответственно