Skip to main content

CouchDB - Banco de Dados

  • CouchDB - Banco de Dados

📘 Documentação Técnica – Apache CouchDB

📌 Visão Geral

O Apache CouchDB é um banco de dados orientado a documentos, com uma API RESTful baseada em HTTP e armazenamento em formato JSON. Ele suporta:

  • Replicação de dados bidirecional com detecção e resolução de conflitos.
  • Indexação com MapReduce (via JavaScript).
  • Operações via curl, Futon (interface web), ou ferramentas como CouchApp.

🔐 Autenticação (Opcional)

curl -X GET http://admin:password@localhost:5984/mydb/_all_docs?include_docs=true

📂 Gerenciamento de Bancos de Dados

OperaçãoMétodo e CaminhoExemplo
Listar bancosGET /_all_dbscurl -X GET http://localhost:5984/_all_dbs
Criar bancoPUT /<db>curl -X PUT http://localhost:5984/demo
Apagar bancoDELETE /<db>curl -X DELETE http://localhost:5984/demo
Info do bancoGET /<db>curl -X GET http://localhost:5984/demo

🧾 Gerenciamento de Documentos

📄 CRUD

OperaçãoMétodo e CaminhoExemplo
Listar documentosGET /<db>/_all_docs?include_docs=true
Obter documentoGET /<db>/<doc_id>?rev=xyz para versão específica
Criar documento com IDPUT /<db>/<id>-d '{"nome":"João"}'
Criar com ID automáticoPOST /<db>
Atualizar documentoPUT /<db>/<id>Necessário incluir _rev
Deletar documentoDELETE /<db>/<id>?rev=<rev>

📦 Bulk e Chaves

POST /<db>/_bulk_docs
-d '{ "docs": [ {"_id":"doc1"}, {"_id":"doc2"} ] }'

POST /<db>/_all_docs
-d '{ "keys": ["doc1", "doc2"] }'

📎 Anexos

OperaçãoCaminhoExemplo
Adicionar anexoPUT /<db>/<doc>/<arquivo>?rev=...--data-binary @img.png -H "Content-Type:image/png"
Listar anexosGET /<db>/<doc>Analise do campo _attachments
Obter anexoGET /<db>/<doc>/<anexo>
Deletar anexoDELETE /<db>/<doc>/<anexo>?rev=...

🧠 Views, MapReduce e Design Documents

Criar uma view

{
"_id": "_design/exemplo",
"views": {
"por_nome": {
"map": "function(doc) { if(doc.nome) emit(doc.nome, 1); }"
}
}
}

Consultas

  • GET /<db>/_design/<nome_view>/_view/<nome>
  • Parâmetros úteis: startkey, endkey, limit, descending, include_docs=true

📣 Funções Avançadas

🧪 Shows

GET /<db>/_design/<view>/_show/<function>

🧾 Lists

GET /<db>/_design/<view>/_list/<list_name>/<view_name>

📋 Update Handlers

function(doc, req) {
doc.nome = req.query.nome;
return [doc, "Atualizado"];
}
PUT /<db>/_design/app/_update/handler/doc_id?nome=Maria

🔁 Replicação

POST /_replicate
-d '{
"source": "http://host1/db",
"target": "db_local",
"continuous": true,
"create_target": true
}'

🧹 Manutenção

OperaçãoCaminho
Compactar bancoPOST /<db>/_compact
Compactar view específicaPOST /<db>/_compact/designname
Limpar views antigasPOST /<db>/_view_cleanup

📈 Monitoramento

GET /_stats
GET /_active_tasks

🔁 Alterações em Tempo Real

GET /<db>/_changes?feed=continuous&heartbeat=1000

⚠️ Códigos de Status

CódigoSignificado
200OK
201Criado
202Aceito
404Não encontrado
405Método não permitido
409Conflito de atualização
415Tipo de conteúdo inválido
500Erro interno do servidor

🛠️ Configurações

Após alterações importantes, reinicie o CouchDB.

Interface web: 📍 http://127.0.0.1:5984/_utils/


🧮 Estrutura e Revisão

  • _id: identificador único do documento
  • _rev: controle de versão (ex: "2-abc123" → documento foi alterado 2 vezes)