Como atualizar e remover no MongoDB ?
Atualizando e removendo objetos, operadores de array, operadores de buscas em arrays e operadores de negação.
Atualizando e Removendo dados
Agora o bicho vai pegar LOL.
UPDATE
No MongoDB não existe só uma forma de atualizar o documento, uma das formas já vimos neste post, que foi fazendo uma busca usando o findOne( ), e através do resultado modificamos e usamos a função save( ), porém esse caminho é grande, perceba que precisamos fazer a busca, salvar na variável, e modificar para depois salvar.
Qual a melhor forma?
Ele possui uma função chamada update( ) que tem esse objetivo de fazer tudo de uma só vez. Contém 3 parâmetros que veremos com mais detalhe cada um.
Info 1 O parâmetro options não é obrigatório.
Vamos inserir um objeto para modificarmos
Info 2 Na variável query passamos o name, porém usamos a barra entre o nome, isso é uma REGEX, o i informa que não importa se é maiúsculo ou minúsculo. Assim fazendo uma busca Case insensitive
Me retornou:
Vamos modificar o Testemon
Agora agora faça uma busca
Ué cadê meus outros campos ?
hahaha fiz de propósito, essa forma é incorreta, para isso precisamos saber alguns operadores de modificação. Concerte a merda Adicione os valores de volta para continuarmos.
Operadores de modificação
$set: modifica um valor caso já exista, caso não exista, o $set irá criar o campo com esse valor que está alterando.
$unset: remove campos.
Info 3 Informe 1 (true) nos campos desejável, assim removendo o campo.
$inc: para incrementar um valor e caso o campo não exista, ele irá criar o campo e setar o valor, e para decrementar, passe o valor negativo.
Nos documentos também temos arrays, e se agora queremos também trabalhar com eles, precisamos saber os seus operadores.
Operadores de Array
$push: ele adiciona um valor ao campo do array caso ele já esteja no documento, e caso não exista esse array, ele irá criar esse campo do tipo array que está passando. Caso o campo não existe e não for um array, irá retornar um erro.
$pushAll: se utiliza quando queremos passar mais de um valor para um array.
$pull: retira o valor do campo, caso o campo seja um array existente. Caso não exista ele não fará nada, e se o campo existir e não for array, ocorre em um erro.
$pullAll: inverso do $pushAll, retira todos os valores passado por um array.
Parâmetro OPTIONS do UPDATE
Lembra daquele último parâmetro que falei que não era obrigatório ?
OPTIONS
Para que ele serve ?
Simples, para configurar alguns valores diferentes do padrão em nosso update. Possui os seguintes parâmetros:
upsert
Lembra de quando fazemos a busca e colocamos no parâmetro de modificação o valor a ser modificado ? Caso a query não seja encontrada, ele NÃO fará nada, e retornará para você:
Tem como modificar esse comportamento ? Sim, o upsert serve justamente para isso, por padrão o valor dele é false, com isso não fará nada, mas se modificar para true, ele insere o objeto que está sendo passado como modificação.
Vamos ao seguinte exemplo, modificando o valor do ‘upsert’:
Percebeu que ele criou um novo documento ? =)
$setOnInsert: serve para que podemos colocar um documento que seja inserido caso o upsert seja true e aconteça essa inserção.
Vamos fazer um exemplo que seta os valores comuns para nosso objeto caso ele não seja encontrado no nosso update.
Repare que agora ele fez uma inserção, pois não foi encontrada a query.
MULTI
Lembra daqueles updates sem WHERE no banco relacional ? só faltava quebrar tudo pela frente:p
lá precisamos usar o where para informar quais os objetos que você quer atualizar, caso contrário nem queira saber ☹ vai atualizar todos.
O MongoDB não deixa acontecer esse tipo de cagada situação. (✌╰_╯)☞
Por padrão ele só deixa alterar um de cada vez, a não ser que você passe por parâmetro desse multi como true.
Agora se você for verificar, vai ver que todos os documentos estão com uma active false. Só assim você consegue fazer um update em vários documentos, alterando seu campo multi.
WRITECONCERN
Ele descreve a garantia de que o MongoDB fornece ao relatar o sucesso de uma operação de escrita. Se você quer isso rápido, ele pode ter uma preocupação fraca, cajo queira uma preocupação forte, ele retorna mais demorado. Porém com a preocupação mais fraca, pode ocorrer de não persistir os dados, e não vai saber sobre aquele erro que pode ter acontecido após alguma coisa, agora com a preocupação mais demorada, ele espera o MongoDB confirmar a alteração de escrita pra você, então a garantia é maior. Mais sobre o assunto: Clique aqui
Buscas em arrays ?
Agora vamos aprimorar nossas buscas, aprendendo fazer buscas em arrays, mas para isso vamos inserir arrays em todos os nossos objetos. (Opa em todos ? Já sabemos fazer isso.)
Vamos inserir mais dados nos arrays para depois fazermos buscas:
Pronto! Agora já temos arrays em nossos objetos.
Operadores de buscas em arrays:
$in: ele retorna todos os documentos que tem no seu determinado array o valor passado por parâmetro, caso queira especificar mais valores do array, use apenas uma virgula para informar outro valor.
$nin: É o inverso do $in, e retorna os objetos que não tiverem no valor passado no array.
Vai retornar todos os objetos que não tem no seu array moves o valor ‘folha navalha’.
$all: Ele é semelhante o $and, pois só vai retornar se todos os valores passado por parâmetro do array se forem encontrado no objeto.
Operadores de Negação
$ne(not equal): ele nos ajuda a procurar todos os objetos que não tempo determinado valor.
E então vai retornar os diversos objetos que não tem o tipo grama. Bem simples. =)
Info 4 Cuidado ele não aceita REGEX. Você não pode passar uma regex usando esse operador, ocorrerá em um erro.
$not: retorna todos os objetos que não tenha determinada coisa atribuição.
REMOVE
É simples, para removermos um documento, utilizaremos a função remove( ) que é própria para isso, e de resto você já sabe, utilize os diversos modos de criar uma query para achar os documentos que queira excluir.
Info 5 Cuidado ele é multi true.
Se você der um remove sem nada na query, ele apagará tudo. =(
Cuidado para não fazer merda!!! ٩(-̮̮̃-̃)۶
Concluindo
E é isso, agora se divirta treinando modificando seus dados usando todos os operadores, tenta criar atualizações de vários dados simultâneos com javascript, abuse dos laços de repetições e condições, até a próxima, bye!