Eu tive a chance recentemente de ir para Riviera Dev, uma conferência fantástica de desenvolvedores que acontece perto da Riviera Francesa. A Couchbase patrocinou a conferência, nós trouxemos sorvete artesanal e local de leite de cabra. As pessoas ficaram felizes, as palestras foram interessantes, brindes foram distribuídos. Foi uma conferência incrível.
Quando patrocinamos conferências com essas atividades, costumamos perguntar aos participantes se podemos escanear seus crachás para enviar algumas atualizações do Couchbase. E foi o que fizemos. E às vezes a informação é fácil de recuperar, às vezes é um pouco complicada. Aqui, o código QR continha um VCard. O propósito deles é armazenar informações de contato, informações preciosas – como você sabe, os escaneamentos são a moeda das conferências. É o que nos permite voltar no ano seguinte com ainda mais sorvete.
De qualquer forma, acabamos coletando muitos VCards, mas era difícil colocá-los no formato de marketing onipresente, o CSV. Então, o que você faz quando precisa manipular dados? Você usa o Couchbase Shell.
Couchbase Shell, Shell Yeah!
Shell do Couchbase (cbsh) é um shell moderno, produtivo e divertido para o Couchbase Server e o Capella (nosso DBaaS em nuvem). O código-fonte e as instruções para instalá-lo estão disponíveis no repositório Leia-me.
Eu pessoalmente o instalei clonando-o e compilando-o:
|
1 2 3 |
git clonar https://github.com/couchbaselabs/couchbase-shell cd Couchbase–concha cargueiro instalar —caminho . |
Você precisa ter o Cadeia de ferramentas Rust instalado, porque o Couchbase Shell é escrito em Rust e baseado no meu shell favorito, nushell.
Uma vez instalado, você pode executá-lo digitando cbsh. Ele pedirá para você configurar uma conexão com o Couchbase primeiro. Se você estiver usando a interface de gerenciamento do Capella, você obterá todas as informações necessárias no Conectar guia.

Nushell <3 JSON
Para constar, é assim que o meu VCard se parece:
|
1 2 3 4 5 6 |
INÍCIO:vCard VERSÃO:2.1 N:DOGUIN;Laurent;;; ORG:Couchbase E-mail;INTERNET:Laurent.cãozinho@Couchbase.com FIM:vCard |
Há muitas bibliotecas Node para transformar isso em JSON, eu usei vcard-json. Então, se eu executar node vcard2json.js, recebo um array JSON com todo o conteúdo do VCard como um objeto JSON.
O que é ótimo, mas como isso pode ser manipulado facilmente? Sendo o cbsh baseado no nushell, nós obtemos todas as coisas boas que vêm com ele, como o do json comando, ou o onde filtro, e o JSON selecionar. Então vamos ver como funcionaria passo a passo, com a saída de dados estruturados, também cortesia do nushell:
|
1 2 3 4 5 |
👤 Laurent Doguin 🏠 Capela > nó vcard2json.js [{“nome”:{“sobrenome”:“Doguin”,“nome”:“Laurent”,“nomeAdicional”:“”,“prefixo”:“”,“sufixo”:“”},“organização”:“Couchbase”,“e-mail”:[{“éPadrão”:falso,“valueInfo”:{},“valor”:“laurentdoguin@couchbase.com”}]},{“nome”:{“sobrenome”:“Isso”,“nome”:“Pessoa”,“nomeAdicional”:“”,“prefixo”:“”,“sufixo”:“”},“organização”:“DoesNotWorkAtCouchbase”,“e-mail”:[{“éPadrão”:falso,“valueInfo”:{},“valor”:“thiperson@notcouchbase.com”}]}] |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
👤 Laurent Doguin 🏠 Capela > nó vcard2json.js | de json ╭───┬──────────────────────────────┬────────────────────────┬─────────────────────────────────────────────────────────────────────╮ │ # │ nome │ organização │ e-mail │ ├───┼──────────────────────────────┼────────────────────────┼─────────────────────────────────────────────────────────────────────┤ │ 0 │ ╭────────────────┬─────────╮ │ Couchbase │ ╭───┬───────────┬───────────────────┬─────────────────────────────╮ │ │ │ │ sobrenome │ Doguin │ │ │ │ # │ isDefault │ valueInfo │ valor │ │ │ │ │ nome │ Laurent │ │ │ ├───┼───────────┼───────────────────┼─────────────────────────────┤ │ │ │ │ nome do meio │ │ │ │ │ 0 │ falso │ {gravar 0 campos} │ laurentdoguin@Couchbase.com │ │ │ │ │ prefixo │ │ │ │ ╰───┴───────────┴───────────────────┴─────────────────────────────╯ │ │ │ │ sufixo │ │ │ │ │ │ │ ╰────────────────┴─────────╯ │ │ │ │ 1 │ ╭────────────────┬────────╮ │ NãoTrabalhaNaCouchbase │ ╭───┬───────────┬───────────────────┬────────────────────────────╮ │ │ │ │ sobrenome │ Este │ │ │ │ # │ isDefault │ valueInfo │ value │ │ │ │ │ nome │ Pessoa │ │ │ ├───┼───────────┼───────────────────┼────────────────────────────┤ │ │ │ │ nome do meio │ │ │ │ │ 0 │ falso │ {gravar 0 campos} │ essa pessoa@notcouchbase.com │ │ │ │ │ prefixo │ │ │ │ ╰───┴───────────┴───────────────────┴────────────────────────────╯ │ │ │ │ sufixo │ │ │ │ │ │ │ ╰────────────────┴────────╯ │ │ │ ╰───┴──────────────────────────────┴────────────────────────┴─────────────────────────────────────────────────────────────────────╯ |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
👤 Laurent Doguin 🏠 Capela > nó vcard2json.js | de json | onde organização != ‘Couchbase’ ╭───┬─────────────────────────────┬────────────────────────┬────────────────────────────────────────────────────────────────────╮ │ # │ name │ organization │ email │ ├───┼─────────────────────────────┼────────────────────────┼────────────────────────────────────────────────────────────────────┤ │ 0 │ ╭────────────────┬────────╮ │ NãoTrabalhaNaCouchbase │ ╭───┬───────────┬───────────────────┬────────────────────────────╮ │ │ │ │ sobrenome │ Este │ │ │ │ # │ isDefault │ valueInfo │ value │ │ │ │ │ nome │ Pessoa │ │ │ ├───┼───────────┼───────────────────┼────────────────────────────┤ │ │ │ │ nome do meio │ │ │ │ │ 0 │ falso │ {gravar 0 campos} │ essa pessoa@notcouchbase.com │ │ │ │ │ prefixo │ │ │ │ ╰───┴───────────┴───────────────────┴────────────────────────────╯ │ │ │ │ sufixo │ │ │ │ │ │ │ ╰────────────────┴────────╯ │ │ │ ╰───┴─────────────────────────────┴────────────────────────┴────────────────────────────────────────────────────────────────────╯ |
|
1 2 3 4 5 6 7 |
👤 Laurent Doguin 🏠 Capela > nó vcard2json.js | de json | onde organização != ‘Couchbase’ | selecionar nome.nome nome.sobrenome organização e-mail.0.value ╭───┬───────────┬──────────────┬────────────────────────┬────────────────────────────╮ │ # │ name_name │ name_surname │ organization │ email_0_value │ ├───┼───────────┼──────────────┼────────────────────────┼────────────────────────────┤ │ 0 │ Pessoa │ Este │ NãoTrabalhaNaCouchbase │ essa pessoa@notcouchbase.com │ ╰───┴───────────┴──────────────┴────────────────────────┴────────────────────────────╯ |
Now that the data is ready and cleaned-up, what can I do with it ? I could write this to a CSV file like this:
|
1 |
> nó vcard2json.js | de json | onde organização != ‘Couchbase’ | selecionar nome.nome nome.sobrenome organização e-mail.0.value | para csv| save contacts.csv |
I could also write it to Couchbase. I have my credential all set already. The first command chooses the bucket and default scope and collection. The second one iterates through the JSON array, generates a random UUID, wraps the content under a content column and adds an ID column with the generated UUID, then inserts the result in Couchbase.
|
1 2 3 |
👤 Laurent Doguin 🏠 Capela > cb–ambiente balde vcard |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
👤 Laurent Doguin 🏠 Capela em ☁️ vcard._default._default > nó vcard2json.js | de json | onde organização != ‘Couchbase’ |selecionar nome.nome nome.sobrenome organização e-mail.0.value |rename nome lastname organização e-mail | each { |ele| deixar uuid = {random uuid}; $ele | wrap conteúdo| inserir identidade $uuid | doc atualização upsert } ╭───┬───────────────────────────────────────────────────────────╮ │ 0 │ ╭───┬───────────┬─────────┬────────┬──────────┬─────────╮ │ │ │ │ # │ processed │ success │ failed │ failures │ cluster │ │ │ │ ├───┼───────────┼─────────┼────────┼──────────┼─────────┤ │ │ │ │ 0 │ 1 │ 1 │ 0 │ │ Capela │ │ │ │ ╰───┴───────────┴─────────┴────────┴──────────┴─────────╯ │ │ 1 │ ╭───┬───────────┬─────────┬────────┬──────────┬─────────╮ │ │ │ │ # │ processed │ success │ failed │ failures │ cluster │ │ │ │ ├───┼───────────┼─────────┼────────┼──────────┼─────────┤ │ │ │ │ 0 │ 1 │ 1 │ 0 │ │ Capela │ │ │ │ ╰───┴───────────┴─────────┴────────┴──────────┴─────────╯ │ ╰───┴───────────────────────────────────────────────────────────╯ |
And just to make sure it’s working, the data can be queried with SQL++ directly:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
👤 Laurent Doguin 🏠 Capela em ☁️ vcard._default._default > consulta “SELECT * from `vcard`” ╭───┬────────────────────────────────────────────────┬─────────╮ │ # │ vcard │ cluster │ ├───┼────────────────────────────────────────────────┼─────────┤ │ 0 │ ╭──────────────┬─────────────────────────────╮ │ Capela │ │ │ │ nome │ Person1 │ │ │ │ │ │ lastname │ LastNa │ │ │ │ │ │ organização │ Organisat │ │ │ │ │ │ e-mail │ person1lastna@Couchbase.com │ │ │ │ │ ╰──────────────┴─────────────────────────────╯ │ │ │ 1 │ ╭──────────────┬────────────────────────────╮ │ Capela │ │ │ │ nome │ Pessoa │ │ │ │ │ │ lastname │ Este │ │ │ │ │ │ organização │ NãoTrabalhaNaCouchbase │ │ │ │ │ │ e-mail │ essa pessoa@notcouchbase.com │ │ │ │ │ ╰──────────────┴────────────────────────────╯ │ │ ╰───┴────────────────────────────────────────────────┴─────────╯ |
So there you are, a practical example of using Couchbase Shell to manipulate Data, transform it and import it to Couchabse. But there are plenty of other uses for it! What’s your favorite?

Deixe um comentário
Você precisa fazer o login para publicar um comentário.