# MongoDB

O **MongoDB** realiza operações em uma conexão com um banco de dados Mongo, retornando apenas um objeto JSON.

{% hint style="info" %}
Atenção ao consumo de memória para grandes conjuntos de dados.
{% endhint %}

## **Parâmetros**

Dê uma olhada nos parâmetros de configuração do conector. Parâmetros suportados por [expressões Double Braces](/documentation/connectors-and-triggers/pt-br/double-braces/overview.md) estão marcados com `(DB)`.

### **Aba General**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Account</strong></td><td>Conta a ser utilizada pelo conector. Contas suportadas: <strong>Basic</strong> e <strong>Certificate Chain</strong>.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Use SSL/TLS to connect</strong></td><td>Quando ativado, será utilizada uma conexão segura SSL/TLS.</td><td>False</td><td>Boolean</td></tr><tr><td><strong>Custom SSL/TLS certificate</strong></td><td>Define o certificado personalizado que pode ser utilizado em expressões Double Braces para a conexão segura.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Allow invalid hostnames</strong></td><td>Quando ativado, essa opção ignora a validação de nomes de host nos certificados SSL/TLS.</td><td>False</td><td>Boolean</td></tr><tr><td><strong>Operation</strong></td><td>Operação a ser executada (<strong>Find, Aggregate</strong>, <strong>Delete One</strong>, <strong>Delete Many</strong>, <strong>Insert One</strong>, <strong>Insert Many</strong>, <strong>Update One</strong>, <strong>Update Many</strong>, <strong>Replace One</strong>, <strong>List Indexes</strong>, <strong>Create Index</strong> e <strong>Drop Index</strong>).</td><td>Find</td><td>String</td></tr><tr><td><strong>Connection String</strong></td><td>A string de conexão. Este parâmetro recupera <code>globals</code> e <code>capsules</code> utilizando a expressão Double Braces, mas não recupera os objetos <code>message</code> ou <code>metadata</code>.</td><td><code>mongodb://localhost:27017</code></td><td>String</td></tr><tr><td><strong>Database Name</strong></td><td>Nome do banco de dados.</td><td><code>databaseName</code></td><td>String</td></tr><tr><td><strong>Collection Name</strong></td><td>Nome da coleção.</td><td><code>collectionName</code></td><td>String</td></tr><tr><td><strong>Expire after seconds</strong></td><td>Tempo (em segundos) para expiração dos documentos ao usar um índice TTL. Disponível apenas se a operação <strong>Create Index</strong> for selecionada.</td><td>0</td><td>Integer</td></tr><tr><td><strong>Query</strong> <code>(DB)</code></td><td>Especificação do Mongo a ser utilizada. Exemplo: <code>{ _id: ObjectId( {{ message.$.id }} ) }</code></td><td>N/A</td><td>String</td></tr><tr><td><strong>Document</strong></td><td>Disponível apenas se <strong>Insert One</strong>, <strong>Insert Many</strong>, <strong>Update One</strong>, <strong>Update Many</strong> ou <strong>Replace One</strong> forem selecionados.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Limit</strong> <code>(DB)</code></td><td>Especificação do número máximo de objetos que podem ser retornados.</td><td>0</td><td>Integer</td></tr><tr><td><strong>Skip</strong> <code>(DB)</code></td><td>Número de objetos a serem ignorados antes da consulta.</td><td>0</td><td>Integer</td></tr><tr><td><strong>Sort</strong></td><td>Especificação do parâmetro de ordenação pelo campo.</td><td>N/A</td><td>String</td></tr><tr><td><strong>Fail On Error</strong></td><td>Se ativado, a execução do pipeline sermongá interrompida em caso de erro. Caso contrário, a execução continuará, mas o resultado indicará um valor falso para a propriedade <code>"success"</code>.</td><td>False</td><td>Boolean</td></tr><tr><td><strong>Max Wait For Connection (in ms)</strong></td><td>Valor padrão: 10000 (pode ser alterado).</td><td>10000</td><td>Integer</td></tr><tr><td><strong>Connection Timeout (in ms)</strong></td><td>Valor padrão: 30000 (pode ser alterado).</td><td>30000</td><td>Integer</td></tr><tr><td><strong>Socket Timeout (in ms)</strong></td><td>Valor padrão: 30000 (pode ser alterado).</td><td>300000</td><td>Integer</td></tr><tr><td><strong>Heartbeat Connection Timeout (in ms)</strong></td><td>Valor padrão: 10000 (pode ser alterado).</td><td>10000</td><td>Integer</td></tr><tr><td><strong>Max Connection Idle Timeout (in ms)</strong></td><td>Valor padrão: 1800000.</td><td>1800000</td><td>Integer</td></tr></tbody></table>

### **Aba Documentation**

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td>Seção para documentar qualquer informação necessária sobre a configuração do conector e regras de negócio.</td><td>N/A</td><td>String</td></tr></tbody></table>

{% hint style="info" %}
Atualmente, o conector suporta apenas contas Basic e Certificate Chain, e elas devem ser informadas no campo Account, não diretamente na string de conexão.
{% endhint %}

Você pode:

* Usar um JSON fixo: `document = "{\"data\": [{\"object\": 1}, {\"object\": 2}]}"`
* Obter um JSON da mensagem, que buscará o objeto `'data'` da mensagem: `document = "{{ message.$.data }}`
* Combinar os dois exemplos: `document = "{\"data\": [{\"object\": {{ message.$.id1 }}}, {\"object\": {{ message.$.id2 }}}]}"`

Se o MongoDB exigir autenticação, é necessário criar uma conta do tipo BASIC e usá-la no conector.

Para converter Double Braces, utilizamos especificações JSON Path. [Leia a documentação sobre JSON Path no GitHub](https://github.com/json-path/JsonPath).

## **MongoDB em ação**

<details>

<summary><strong>Operação Find</strong></summary>

**Config**

```json
{
	"operation": "FIND",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"query": "{_id: ObjectId({{ message.$.parameters.id }})}",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	}
}
```

**Saída**

```json
{
	"data": [...some data...],
	"rowCount": 10,
	"updateCount": 0
}
```

</details>

<details>

<summary><strong>Operação Replace One</strong></summary>

**Config**

```json
{
	"operation": "REPLACE_ONE",
	"databaseName": "test",
	"collectionName": "model",
	"document": "{\"data\": [{\"object\": 1}, {\"object\": 2}]}",
	"url": "mongodb://localhost:27017",
	"query": "{_id: ObjectId({{ message.$.parameters.id }})}",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	}
}
```

**Output**

```json
{
    "data": {},
    "rowCount": 0,
    "updateCount": 1
}
```

</details>

<details>

<summary><strong>Operação Update</strong></summary>

**Config**

```json
{
	"operation": "UPDATE",
	"databaseName": "test",
	"collectionName": "model",
	"document": "{\"$set\": {\"data\": [{\"object\": 1}, {\"object\": 2}]}}",
	"url": "mongodb://localhost:27017",
	"query": "{_id: ObjectId({{ message.$.parameters.id }})}",
	"failOnError": false
}	
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	}
}
```

**Output**

```json
{
	"data": {},
	"rowCount": 0,
	"updateCount": 1
}
```

</details>

<details>

<summary><strong>Operação Update Many</strong></summary>

**Config**

```json
{
	"operation": "UPDATE_MANY",
	"databaseName": "test",
	"collectionName": "model",
	"document": "{\"$set\": {\"data\": [{\"object\": 1}, {\"object\": 2}]}}",
	"url": "mongodb://localhost:27017",
	"query": "{name: ObjectId({{ message.$.parameters.name }})}",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"name": "NAME"
	}
}
```

**Output**

```json
{{
	"data": {},
	"rowCount": 0,
	"updateCount": 1
}  
```

</details>

<details>

<summary><strong>Operação Delete</strong></summary>

**Config**

```json
{
	"operation": "DELETE",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"query": "{_id: ObjectId({{ message.$.parameters.id }})}",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	}
}
```

**Output**

```json
{
	"data": {},
	"rowCount": 10,
	"updateCount": 0
}
```

</details>

<details>

<summary><strong>Operação Delete Many</strong></summary>

**Config**

```json
{
	"operation": "DELETE_MANY",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"query": "{name: {{ message.$.data.name }}}",
	"failOnError": false
}
```

**Entrada**

```json
{
	"data": {
		"name": "NAME"
	}
}
```

**Saída**

```json
{
	"data": {},
	"rowCount": 10,
	"updateCount": 0
}
```

</details>

<details>

<summary><strong>Operação Insert</strong></summary>

**Config**

```json
{
	"operation": "INSERT",
	"databaseName": "test",
	"collectionName": "model",
	"document": "{\"data\": {{ message.$.body }}}",
	"url": "mongodb://localhost:27017",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	},
	"body": [
		{"a": 1},
		{"a": 2}
	]
}
```

**Saída**

```json
{
	"data": {},
	"rowCount": 0,
	"updateCount": 1
}
```

</details>

<details>

<summary><strong>Operação Insert Many</strong></summary>

**Config**

```json
{
	"operation": "INSERT_MANY",
	"databaseName": "test",
	"collectionName": "model",
	"document": "{{ message.$.body }}",
	"url": "mongodb://localhost:27017",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	},
	"body": [
		{"a": 1},
		{"a": 2}
	]
}
```

**Saída**

```json
{
	"data": {},
	"rowCount": 0,
	"updateCount": 1
}
```

</details>

<details>

<summary><strong>Operação Aggregate</strong></summary>

**Config**

```json
{
	"operation": "AGGREGATE",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"query": "[{\"$match\":{\"zip\":\"90210\"}},{\"$group\":{\"_id\":null,\"count\":{\"$sum\":1}}}]",
	"failOnError": false
}
```

**Entrada**

```json
{
	"parameters": {
		"id": "5c87c7af06c3af7dbedc7bb3"
	}
}
```

**Saída**

```json
{
	"data": [...some data...],
	"rowCount": 10,
	"updateCount": 0
}
```

</details>

<details>

<summary><strong>Operação List Indexes</strong></summary>

**Config**

```json
{
	"operation": "LIST_INDEXES",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"failOnError": false
}
```

**Entrada**

```json
{ }
```

**Saída**

```json
{
	"data": [...some data...],
	"rowCount": 10
}  
```

</details>

<details>

<summary><strong>Operação Create Index</strong></summary>

**Config**

```json
{
	"operation": "CREATE_INDEX",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"expireAfterSeconds": "3600",
	"query": "{ \"createdAt\": 1 }",
	"failOnError": false
}
```

**Entrada**

```json
{ }
```

**Saída**

```json
{
	"data": "createdAt_1",
	"updateCount": 1
}
```

</details>

<details>

<summary><strong>Operação Drop Index</strong></summary>

**Config**

```json
{
	"operation": "DROP_INDEX",
	"databaseName": "test",
	"collectionName": "model",
	"url": "mongodb://localhost:27017",
	"query": "{ \"createdAt\": 1 }",
	"failOnError": false
}
```

**Entrada**

```json
{ }
```

**Saída**

```json
{
	"data": { },
	"updateCount": 1
}
```

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/connectors/structured-data/mongodb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
