Dicas sobre desenvolvimento de software, gestão e tributações

Rede Social

29 de maio de 2018

Mongo: Find limitando registros e ordenação sort


    Muitas vezes desejamos selecionar um número específico de registros, imaginemos o seguinte caso, tenho uma loja e quero lançar um desconto promocional para o funcionário que tem o melhor aproveitamento em vendas. Esse aproveitamento é um número de 0 a 10 que é lançado baseado na quantidade de atendimentos, vendas e elogios por parte dos clientes.

     Poderíamos executar este comando:
db.funcionarios.findOne({
    aproveitamento : { $gt : 8}
})

     O findOne retorna o primeiro valor encontrado, no caso seria o primeiro funcionário que tenha aproveitamento maior que 8.

     Portanto talvez fosse interessante partir para outra opção. Como listar os funcionários ordenando pelo aproveitamento. Para isso usamos o sort.

db.funcionarios.find().sort({"aproveitamento" : 1})

     Com este comando estamos ordenando por ordem crescente, caso queira que seja por ordem decrescente é só alterar o segundo parâmetro para -1.

db.funcionarios.find().sort({"aproveitamento" : -1})

     Tendo ordenado podemos limitar a quantos registros desejamos. Imagine que quero lançar aquele desconto para os 5 funcionários com aproveitamento mais alto. O limit tem esta função, nele se pode colocar o número de registros desejados.

db.funcionarios.find().sort({"aproveitamento" : -1}).limit(5)
Ler

24 de maio de 2018

Mongo: Comandos para selecionar (find)


Pretty comando para identar o selecionar
     Ao utilizar o find como mostrado anteriormente são trazidos todos os dados sem filtro, como por exemplo db.alunos.find(), mas note que são exibidos os dados sem identação e fica um tanto quanto confuso para visualizar quando temos muitos dados, para melhorar isso podemos utilizar o comando pretty, ficaria dessa forma db.alunos.find().pretty(), veja como fica bem mais fácil de visualizar.

Find
    O comando find é utilizado para selecionar valores, anteriormente vimos como podemos selecionar em documentos simples, onde temos apenas uma estrutura, como por exemplo: db.alunos.find(
     { "nome" : "Mateus" }
).pretty()

     Mas e quando temos uma estrutura dentro desse aluno como por exemplo os cursos que ele está estudando, teríamos que pensar em um join se fosse SQL normal, alunos join cursos, mas no mongo fazemos isso de uma forma bem parecida como em linguagens de programação orientada a objetos como por exemplo:
db.alunos.find(
     { "curso.nome" : "Contabilidade" }
).pretty()
Neste exemplo pesquisei os alunos que estão estudando Contabilidade, simples não é?

Condições ("ou/or" e "e/and")
    Em SQL é muito comum termos uma seleção com mais de uma condição, no mongo também podemos fazer isso como por exemplo o "or" em um banco onde estamos trabalhando os funcionários.
db.funcionarios.find({
    $or : [
               {"departamento.nome" : "RH"},
               {"departamento.nome" : "Manutenção"}
             ]
     }).pretty()

     Agora caso quiséssemos filtrar esta consulta ainda pelos funcionários onde o gênero é feminino poderíamos fazer da seguinte forma.
db.funcionarios.find({
    $or : [
               {"departamento.nome" : "RH"},
               {"departamento.nome" : "Manutenção"}
             ],
              "genero" : "F"
     }).pretty()
     Ou seja, para o mongo sempre que adicionamos uma nova condição sem especificar nada ela será um "e/and".

Ler

21 de maio de 2018

Mongo: Comandos para inserção e remoção (insert e delete)


Comandos simples para inserção
Para criar coleções utilizamos o comando createCollection.
db.createCollection("alunos")

Para inserir valores na collection alunos podemos usar o insert
db.alunos.insert({
    "nome" : "João",
    sobrenome : "Silva"
    data_nascimento : new Date(1992,01,10)
})

É feito dessa forma pois é como um objeto javascript.

Também podemos inserir mais de uma collection para indicar collections referenciadas como por exemplo, este aluno cadastrado tem notas das matérias realizadas, poderíamos usar o insert da seguinte forma:
db.alunos.insert({
    "nome" : "João",
    sobrenome : "Silva"
    data_nascimento : new Date(1992,01,10)
},
{
"curso" :
     { "nome" : "JavaScript"}
},
"notas" : [9.0, 8.7]
})

Repare que em notas eu inseri dois valores de uma vez, isso é possível utilizando os colchetes []


Comando para remoção (delete)
     Para remover um aluno temos a opção de remover por ID como no exemplo:
db.alunos.remove({
    "_id" : ObjectId("78as0001q6w89gh25h69x3b5")
})
onde este ObjectId contido nas aspas é só um exemplo, no seu caso (no seu banco) ele será diferente.
Ler

17 de maio de 2018

JavaScript: Introdução


    Java script trabalha com a interatividade de sites com seus usuários, ela é a linguagem nativa da web, e ganhou muita popularidade por sua versatilidade, onde alguns desenvolvedores fizeram com que fosse possível utilizar java script para outras funcionalidades que não apenas no navegador.
     Como o NodeJs que o trouxe para o back-end, onde se é possível tratar requisições, enviar consultas para bancos de dados e etc.
     Também é possível utilizar em aplicações desktop, utilizando o Electron, um framework dedicado a isso, construir aplicativos desktop com html, css e javascript.
    E não bastasse, existe também um framework para utilizar javascript com arduino que é o Johnny-Five.

Boas práticas
    Uma boa prática é adicionar o javascript ao final da tag body, pois como os navegadores leem as páginas linearmente de cima para baixo, pode ser que algo da página ainda não tenha sido carregada quando ele for tentar executar o javascript.
     Document contém o DOM ou Document Object Model, que é como o navegador enxerga o HTML utilizado por ele para renderizar a página e com a função querySelector podemos selecionar uma parte do HTML, como por exemplo document.querySelector("h2").
    Lembrando sempre que é uma boa prática não atrelar muito o js com o html, portanto seria melhor selecionar por #id ou .classe css como por exemplo document.querySelector(".titulo").
    Separar o código js do código HTML é muito importante em alguns casos onde se tem muitas linhas de javascript e para fazer isso basta utilizar o comando <script src=""></script> onde o "" será preenchido pelo caminho do arquivo como, por exemplo <script src="scripts/principal.js"></script> indicando que na pasta principal da aplicação tem uma pasta scripts e dentro dela um arquivo principal.js.
Ler

14 de maio de 2018

Mongo DB: Introdução


Introdução
     Mongo é orientado à documentos (JSON), ou seja, ele é um banco não relacional document-based.
     Basicamente neste tipo de banco (document-based ou document-oriented) temos coleções de documentos, nas quais cada documento é autossuficiente, contém todos os dados que possa precisar, ao invés do conceito de não repetição + chaves estrangeiras do modelo relacional.
     A ideia é que você não tenha de fazer JOINs pois eles prejudicam muito a performance em suas queries (são um mal necessário no modelo relacional, infelizmente). Você modela a sua base de forma que a cada query você vai uma vez no banco e com apenas uma chave primária pega tudo que precisa.
     Obviamente isto tem um custo: armazenamento em disco. Não é raro bancos MongoDB consumirem muitas vezes mais disco do que suas contrapartes relacionais.
     MongoDB é case-sensitive ao contrário dos bancos relacionais.

Aplicativos mongo instalados:
  • mongod: inicializa o servidor de banco de dados;
  • mongo: inicializa o cliente de banco de dados;
  • mongodump: realiza dump do banco (backup binário);
  • mongorestore: restaura dumps do banco (restore binário);
  • mongoimport: importa documentos JSON ou CSV pro seu banco;
  • mongoexport: exporta documentos JSON ou CSV do seu banco;
  • entre outros.


Comandos básicos

Para subir um servidor mongo

C:\mongo\bin> mongod --dbpath C:\mongo\data

     Agora abra outro prompt de comando (o outro ficará executando o servidor) e novamente dentro da pasta bin do Mongo, digite:

c:\mongo\bin> mongo

    O comando abaixo no terminal cliente mostra os bancos existentes nesse servidor:

> show databases

    Agora digite o seguinte comando para “usar” o banco de dados “workshop” (um banco que você sabe que não existe ainda):

> use workshop

     O terminal vai lhe avisar que o contexto da variável “db” mudou para o banco workshop, que nem mesmo existe ainda (mas não se preocupe com isso!). Essa variável “db” representa agora o banco workshop e podemos verificar quais coleções existem atualmente neste banco usando o comando abaixo:

> show collections

    Além de campos com valores específicos, esse parâmetro do find permite usar uma infinidade de operadores como por exemplo, trazer todos documentos que possuam a letra ‘a’ no nome com regex:
> db.customers.find({nome: { $regex: /a/ }})

     Mas e se eu quiser trazer todos os customers maiores de idade?
> db.customers.find({idade: {$gte: 18}})
     O operador $gte (Greater Than or Equal) retorna todos os documentos que possuam o campo idade e que o valor do mesmo seja igual ou superior à 18. E podemos facilmente combinar filtros usando vírgulas dentro do documento passado por parâmetro, assim como fazemos quando queremos inserir campos em um documento:
> db.customers.find({nome: "Luiz", idade: {$gte: 18}})

Alguns outros operadores que você pode usar junto ao filtro do find são:
  • $eq: exatamente igual (=)
  • $ne: diferente (<> ou !=)
  • $gt: maior do que (>)
  • $lt: menor do que (<)
  • $lte: menor ou igual a (<=)
  • $in: o valor está contido em um array de possibilidades, como em um OU. Ex: {idade: {$in: [10,12] }}
  • $all: MongoDB permite campos com arrays. Ex: { tags: [“NodeJS”, “MongoDB”] }. Com esse operador, você compara se seu campo multivalorado possui todos os valores de um array específico. Ex: {tags: {$all: [“NodeJS”, “Android”]}}

     Você também pode usar findOne ao invés de find para retornar apenas o primeiro documento, ou ainda as funções limit e skip para limitar o número de documentos retornados e para ignorar alguns documentos, especificamente, da seguinte maneira:
> db.customers.find().skip(1).limit(10)
     No exemplo acima retornaremos 10 customers ignorando o primeiro existente na coleção.

     E para ordenar? Usamos a função sort no final de todas as outras, com um documento indicando quais campos e se a ordenação por aquele campo é crescente (1) ou descrescente (-1), como abaixo em que retorno todos os customers ordenados pela idade:
> db.customers.find().sort({idade: 1})
Nota: assim como nos bancos relacionais, os métodos de consulta retornam em ordem de chave primária por padrão, o que neste caso é o _id.
Ler

10 de maio de 2018

UX: Microcopy (Microtexto)


    Pode ser usado para links, botões, títulos, ações, enfim para quase tudo.
    É muito importante ter em mente que os textos devem ser simples e diretos, mas sem ser invasivo ou autoritário, eles devem literalmente conversar com o usuário claramente e fazer com que ele fique confortável.

     Usemos o exemplo do trivago, a sua página inicial é esta, o logo, um texto simples explicando claramente o que o site faz e embaixo um campo para digitar o texto da pesquisa "Ex.: Foz do Iguaçu". Mas se pensarmos bem Foz do Iguaçu é uma cidade e este campo de busca não serve apenas para cidades, nele posso digitar estados por exemplo que também é realizada a pesquisa, por tanto, pode ser melhorado para explicar melhor ao usuário o que acontece alí e não limitar a funcionalidade. Se tivéssemos, por exemplo, "Onde deseja encontrar hotéis?" teríamos mais possibilidades para o usuário digitar, vale apontar que em alguns casos perguntas são muito bem vindas.
Ler