Carregando...
CouchDB

Fazendo FOREIGN KEYS, fazendo JOINs e árvores no CouchDB

O jeito mais completo de se fazer o equivalente a JOINs no CouchDB é usando uma técnica chamada “view collation”. Basicamente consiste em você criar uma view que faça o “emit” da chave da referência na chave.

  • O exemplo abaixo precisa ser melhorado.

Crie os seguintes 3 documentos:

{
    "_id": "a",
    "name": "aaa"
}

{
    "_id": "b",
    "name": "bbb"
}

{
    "_id": "c",
    "name": "ccc",
    "parents": [
        {"_id": "a"},
        {"_id": "b"}
    ]
}

Crie uma view/índice com o seguinte:

function (doc) {
  if(doc.parents){
    for(var i = 0; i<doc.parents.length; i++){
            emit(doc._id, doc.parents[i]);
    }
  }
}

E agora, quando você for visualizar a view, use include_docs=true:

http://localhost:5984/test/_design/test/_view/new-view?include_docs=true

O segredo está em enviar um objeto com “_id”: “id_do_objeto” no campo VALUE da chamada de função emit.

Extra: um comportamento curioso das VIEWs

Outra coisa interessante nas VIEWs é que você pode fazer o emit de um objeto JSON com {… _id: “id_de_um_documento” …} no campo value e ao chamar a view com include_docs=true será retornado o documento “id_de_um_documento” completo ao invés do documento original.

Referências

Views Collation – Documentação oficial do CouchDB
https://docs.couchdb.org/en/stable/ddocs/views/collation.html

Views Collation – Jo CouchDB best practices
https://jo.github.io/couchdb-best-practices/#view-collation

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *