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ção | Método e Caminho | Exemplo |
|---|---|---|
| Listar bancos | GET /_all_dbs | curl -X GET http://localhost:5984/_all_dbs |
| Criar banco | PUT /<db> | curl -X PUT http://localhost:5984/demo |
| Apagar banco | DELETE /<db> | curl -X DELETE http://localhost:5984/demo |
| Info do banco | GET /<db> | curl -X GET http://localhost:5984/demo |
🧾 Gerenciamento de Documentos
📄 CRUD
| Operação | Método e Caminho | Exemplo |
|---|---|---|
| Listar documentos | GET /<db>/_all_docs?include_docs=true | |
| Obter documento | GET /<db>/<doc_id> | ?rev=xyz para versão específica |
| Criar documento com ID | PUT /<db>/<id> | -d '{"nome":"João"}' |
| Criar com ID automático | POST /<db> | |
| Atualizar documento | PUT /<db>/<id> | Necessário incluir _rev |
| Deletar documento | DELETE /<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ção | Caminho | Exemplo |
|---|---|---|
| Adicionar anexo | PUT /<db>/<doc>/<arquivo>?rev=... | --data-binary @img.png -H "Content-Type:image/png" |
| Listar anexos | GET /<db>/<doc> | Analise do campo _attachments |
| Obter anexo | GET /<db>/<doc>/<anexo> | |
| Deletar anexo | DELETE /<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ção | Caminho |
|---|---|
| Compactar banco | POST /<db>/_compact |
| Compactar view específica | POST /<db>/_compact/designname |
| Limpar views antigas | POST /<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ódigo | Significado |
|---|---|
| 200 | OK |
| 201 | Criado |
| 202 | Aceito |
| 404 | Não encontrado |
| 405 | Método não permitido |
| 409 | Conflito de atualização |
| 415 | Tipo de conteúdo inválido |
| 500 | Erro 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)