> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Bancos de dados

> Leia, crie, atualize e exclua registros dos seus bancos de Datum direto no canvas

O nó **Bancos de dados** conecta seu fluxo com seus bancos de Datum e executa operações sobre os registros sem escrever código. Você escolhe o banco, a coleção e a operação — o painel monta a requisição para você.

Pense neste nó como um intermediário entre seu fluxo e o Datum: você diz o que fazer com os registros e ele cuida de falar com o serviço.

<Note>
  Para administrar seus bancos, coleções, campos e registros no Datum, consulte a [documentação completa do Datum](/pt/guias/datum/introducao). Este nó pressupõe que o banco já existe.
</Note>

***

## Conceito-chave

Toda operação do nó se resolve contra **um banco + uma coleção + uma operação**. Os três são obrigatórios para que o nó monte a requisição correta.

| Conceito           | O que significa                                                                   |
| :----------------- | :-------------------------------------------------------------------------------- |
| **Banco de dados** | O contêiner que você tem provisionado no Datum.                                   |
| **Coleção**        | A tabela dentro do banco: usuários, pedidos, produtos, etc.                       |
| **Operação**       | A ação que você executará na coleção: listar, obter, criar, atualizar ou excluir. |

Trocar qualquer um dos três limpa os campos abaixo que dependem dele. Se você já tinha inserido dados que seriam perdidos, o painel exibe um modal de confirmação antes de aplicar a mudança.

***

## Configuração

O painel é organizado de cima para baixo, na mesma ordem em que você deve configurá-lo.

### Banco de dados

Seletor com os bancos disponíveis na sua conta do Datum. Ao lado do rótulo há um botão **Abrir** que abre o banco em uma nova aba do app do Datum — útil para revisar coleções e registros enquanto configura o nó.

<Frame caption="Seletor de banco de dados com botão Abrir">
  <img src="https://mintcdn.com/jelouai/kALZm2QrUx5mUtt4/assets/images/nodos/bases-de-datos/selector-base-datos-pt.png?fit=max&auto=format&n=kALZm2QrUx5mUtt4&q=85&s=49d1cb416e27f72b55186829c94d23e1" alt="Seletor de banco de dados com botão Abrir no canto superior direito" width="1073" height="968" data-path="assets/images/nodos/bases-de-datos/selector-base-datos-pt.png" />
</Frame>

<Note>
  Se a lista aparecer vazia ou você ver um erro 401/403, seu usuário não tem permissão sobre o banco. Entre em contato com o administrador de Datum da sua conta.
</Note>

### Coleção

Habilitado somente quando há um banco selecionado. Mostra as coleções que você criou no banco (as coleções internas do Datum não aparecem). Enquanto carrega, o seletor fica desabilitado; se a busca falhar, permanece desabilitado até que o banco mude ou as permissões sejam corrigidas.

### Operação

Define o que o nó fará sobre a coleção:

| Operação               | Para que serve                                              |
| :--------------------- | :---------------------------------------------------------- |
| **Listar registros**   | Trazer vários registros com filtros, ordenação e paginação. |
| **Obter registro**     | Trazer um único registro pelo `id`.                         |
| **Criar registro**     | Inserir um novo registro.                                   |
| **Atualizar registro** | Modificar um registro existente pelo `id`.                  |
| **Excluir registro**   | Apagar um registro pelo `id`.                               |

### Campos por operação

O restante do painel muda conforme a operação escolhida.

#### ID do registro

Obrigatório em **Obter**, **Atualizar** e **Excluir**. Aceita um valor fixo ou uma variável:

```
{{$context.userRecordId}}
```

<Warning>
  Se você escolher **Obter**, **Atualizar** ou **Excluir** e deixar o ID em branco, o serviço responde com `404 Record not found`. Isso é intencional: protege contra chamadas acidentais contra a coleção inteira quando você queria atingir um único registro.
</Warning>

#### Valores dos campos

Para **Criar** e **Atualizar**, o painel abre um editor com um controle específico para cada tipo de campo declarado na coleção:

| Tipo do campo                    | Controle                                            |
| :------------------------------- | :-------------------------------------------------- |
| `text`, `email`, `url`, `number` | Input com suporte a variáveis                       |
| `bool`                           | Interruptor `true`/`false` ou entrada de variável   |
| `date`                           | Calendário + seletor de hora ou entrada de variável |
| `select` (simples ou múltiplo)   | Seletor suspenso ou entrada de variável             |
| `editor`                         | Editor de texto rico                                |
| `json`                           | Área de texto com sintaxe JSON                      |

Nos tipos que suportam, um seletor ao lado do campo alterna entre **Valor fixo** (o controle nativo) e **Variável** (entrada livre em que você pode inserir `{{$memory.x}}` ou `{{$context.y}}`).

<Frame caption="Editor de campos por tipo declarado na coleção">
  <img src="https://mintcdn.com/jelouai/kALZm2QrUx5mUtt4/assets/images/nodos/bases-de-datos/editor-campos-pt.png?fit=max&auto=format&n=kALZm2QrUx5mUtt4&q=85&s=106e92a4fc195445e86faeda51e0e6fb" alt="Editor de campos mostrando controles conforme o tipo declarado na coleção" width="1174" height="801" data-path="assets/images/nodos/bases-de-datos/editor-campos-pt.png" />
</Frame>

#### Filtros (apenas Listar)

Construtor visual com um ou mais termos unidos por AND. Cada linha é composta por campo, operador e valor.

| Operador             | Significado                    |
| :------------------- | :----------------------------- |
| `=`, `!=`            | Igual / diferente              |
| `>`, `>=`, `<`, `<=` | Comparação numérica ou de data |
| `~`                  | Contém o texto                 |
| `!~`                 | Não contém o texto             |

Termos sem campo ou sem valor são ignorados no momento da execução — não bloqueiam a requisição nem geram erro; simplesmente não fazem parte do filtro final.

<Frame caption="Construtor visual de filtros com regras AND">
  <img src="https://mintcdn.com/jelouai/kALZm2QrUx5mUtt4/assets/images/nodos/bases-de-datos/constructor-filtros-pt.png?fit=max&auto=format&n=kALZm2QrUx5mUtt4&q=85&s=8339129f5dc78c6597869b37b50b4534" alt="Construtor visual de filtros com operadores e regras AND" width="1176" height="675" data-path="assets/images/nodos/bases-de-datos/constructor-filtros-pt.png" />
</Frame>

#### Ordenação (apenas Listar)

Construtor com uma linha por critério. Em cada linha você escolhe o campo e a direção (ascendente ou descendente). Os critérios se aplicam na ordem em que estão visíveis.

#### Paginação (apenas Listar)

Dois campos numéricos: **página** (padrão `1`) e **por página** (padrão `50`). Se você deixar algum vazio ou inserir um número inválido, o nó usa o valor padrão no momento da execução.

***

## Salvar a resposta

Ative o toggle **Salvar resposta** no cabeçalho do painel e defina um nome de variável. A resposta completa do serviço é armazenada nessa variável e fica disponível nos nós seguintes.

### Acessar a resposta sem manipulação

Use a variável diretamente em outros nós:

```
{{$context.basesRespuesta}}
```

### Manipular a resposta em um nó Código

```javascript theme={null}
let respuesta = $context.getHttpResponse('basesRespuesta')
respuesta = respuesta.json()

const primerRegistro = respuesta.items?.[0]
$memory.set('primerRegistro', primerRegistro)
```

<Warning>
  A chave usada em `$context.getHttpResponse('basesRespuesta')` deve coincidir exatamente com a configurada em "Salvar resposta".
</Warning>

***

## Resposta de teste

O botão **Testar** no cabeçalho executa a requisição contra o Datum e abre um popover com o resultado. O popover mostra:

* **Código de status** (por exemplo, `200` ou `404`)
* **Aba Corpo** — resposta formatada como JSON com botão de copiar
* **Aba Cabeçalhos** — cabeçalhos de resposta do serviço

<Frame caption="Popover de resposta de teste com abas Corpo e Cabeçalhos">
  <img src="https://mintcdn.com/jelouai/kALZm2QrUx5mUtt4/assets/images/nodos/bases-de-datos/respuesta-prueba-pt.png?fit=max&auto=format&n=kALZm2QrUx5mUtt4&q=85&s=90ea56f48ba88e06b9b9a25c8943f980" alt="Popover de resposta do botão Testar com abas Corpo e Cabeçalhos" width="1204" height="860" data-path="assets/images/nodos/bases-de-datos/respuesta-prueba-pt.png" />
</Frame>

<Tip>
  Se você fechar o popover e reabrir sem tocar na configuração, o nó mostra a última resposta em vez de fazer uma nova chamada ao serviço. Assim que você altera qualquer campo, essa resposta é marcada como desatualizada e na próxima abertura o nó executa novamente.
</Tip>

***

## Casos de uso

<AccordionGroup>
  <Accordion title="Captura de leads em um workflow do WhatsApp">
    Um workflow do WhatsApp que captura leads precisa armazenar o telefone e o nome do usuário sem passar por um endpoint externo. Mapeie `{{$user.phone}}` e `{{$memory.nombre}}` para os campos da coleção `leads`, escolha a operação **Criar** e o registro fica salvo sem escrever uma linha de código.
  </Accordion>

  <Accordion title="Atendimento ao cliente com respostas personalizadas">
    Um workflow de atendimento ao cliente que personaliza respostas consulta primeiro a coleção `clientes` filtrando pelo email do usuário. O resultado é armazenado em uma variável e os nós seguintes o usam para adaptar a mensagem. Antes isso exigia um nó API com URL construída manualmente; agora são três dropdowns e um filtro visual.
  </Accordion>

  <Accordion title="Acompanhamento de pedidos com atualização de status">
    Um workflow de acompanhamento de pedidos recebe um código, busca o registro com a operação **Obter** e atualiza o campo `status` para `entregado` com a data obtida de `{{$context.now}}`. O mesmo processo que antes exigia dois nós API agora se resolve em um único nó.
  </Accordion>
</AccordionGroup>
