![Logo](https://i.imgur.com/hsGeqyY.png) # MongoDB Cheat Sheet ###### Inspirado no cheat sheet do [Web Dev Simplified](https://webdevsimplified.com/mongodb-cheat-sheet.html) > [TOC] ## Terminology ### Database > [color=#f23cf2] Um contêiner para coleções. Isso é o mesmo que um banco de dados em SQL e geralmente cada projeto terá seu próprio banco de dados cheio de coleções diferentes. ### Collection > [color=#f23cf2] Um agrupamento de documentos dentro de um banco de dados. Isso é o mesmo que uma tabela em SQL e geralmente cada tipo de dados (usuários, posts, produtos) terão seus próprios collection.collections. ### Document > [color=#f23cf2] Um registro dentro de uma coleção. Isso é o mesmo que uma linha no SQL e geralmente haverá um documento por objeto na coleção. Um documento é também essencialmente apenas um objeto JSON. ### Field > [color=#f23cf2] Um par de chave-valor em um documento. Isso é o mesmo que uma coluna no SQL. Cada documento terá um certo número de campos que contêm informações como nome, endereço, hobbies, etc. Uma diferença importante entre SQL e MongoDB é que um campo pode conter valores como objetos JSON e arrays em vez de apenas strings, número, booleanos, etc. ## Basic Commands ```mongosh=1 mongosh ``` > [color=#f23cf2] Abre uma conexão com sua instância local do MongoDB. Todos os outros comandos será executado dentro desta conexão mongosh. --- ```mongosh=1 show dbs ``` > [color=#f23cf2] Mostrar todos os bancos de dados na instância atual do MongoDB --- ```mongosh=1 use <dbname> use myDatabase ``` > [color=#f23cf2] Mude para o banco de dados fornecido por dbname Mudar para myDatabase --- ```mongosh=1 db ``` > [color=#f23cf2] Mostrar nome do banco de dados atual --- ```mongosh=1 cls ``` > [color=#f23cf2] Limpar a tela do terminal --- ```mongosh=1 show collections ``` > [color=#f23cf2] Mostrar todas as coleções no banco de dados atual --- ```mongosh=1 db.dropDatabase() ``` > [color=#f23cf2] Excluir o banco de dados atual --- ```mongosh=1 exit ``` > [color=#f23cf2] Saia da sessão mongosh ## Create > [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica `db.<collectionName>.<command>` ### **insertOne** ```mongosh=1 db.users.insertOne({ name: "Jonathan" }) ``` > [color=#f23cf2] Crie um novo documento dentro da coleção especificada. Adiciona um novo documento com o nome de Jonathan na coleção de usuários ### **insertMany** ```mongosh=1 db.users.insertMany([{ age: 26 }, { age: 20 }]) ``` > [color=#f23cf2] Crie vários novos documentos dentro de uma coleção específica. Adicione dois novos documentos com 26 e 20 anos de idade à coleção de usuários ## Read > [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica `db.<collectionName>.<command>` ### **find** ```mongosh=1 db.users.find() ``` > [color=#f23cf2] Obtenha todos os documentos. Obter todos os usuários ### **find(\<filterObject>)** ```mongosh=1 db.users.find({ name: "Jonathan" }) db.users.find({ "address.street": "123 Main St" }) ``` > [color=#f23cf2] Encontre todos os documentos que correspondem ao objeto de filtro. Obtenha todos os usuários com o nome Jonathan Obtenha todos os usuários cujo campo de endereço tenha um campo de rua com o valor 123 Main St ### **find(\<filterObject>, \<selectObeject>)** ```mongosh=1 db.users.find({ name: "Jonathan" }, { name: 1, age: 1 }) db.users.find({}, { age: 0}) ``` > [color=#f23cf2] Encontre todos os documentos que correspondem ao objeto de filtro, mas apenas retornar o campo especificado no objeto selecionado. Obtenha todos os usuários com o nome Jonathan, mas retorne apenas seu nome, idade e _id Obter todos os usuários e retornar todas as colunas, exceto idade ### **findOne** ```mongosh=1 db.users.findOne({ name: "Jonathan" }) ``` > [color=#f23cf2] O mesmo que find, mas retornar apenas o primeiro documento que corresponde ao objeto de filtro. Obtenha o primeiro usuário com o nome Jonathan ### **countDocuments** ```mongosh=1 db.users.countDocuments({ name: "Jonathan" }) ``` > [color=#f23cf2] Retorna a contagem dos documentos que correspondem ao filtro objeto passado para ele. Obtenha o número de usuários com o nome Jonathan ## Update > [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica `db.<collectionName>.<command>` ### **updateOne** ```mongosh=1 db.users.updateOne({ age: 20 }, { $set: { age: 21 } }) ``` > [color=#f23cf2] Atualiza o primeiro documento que corresponde ao objeto de filtro com os dados passados para o segundo parâmetro que é o atualizar objeto. Atualize o primeiro usuário com idade de 20 para a idade de 21 ### **updateMany** ```mongosh=1 db.users.updateMany({ age: 12 }, { $inc: { age: 3 } }) ``` > [color=#f23cf2] Atualize todos os documentos que correspondem ao objeto de filtro com o dados passados para o segundo parâmetro que é a atualização objeto. Atualize todos os usuários com idade de 12 anos adicionando 3 à idade deles ### **replaceOne** ```mongosh=1 db.users.replaceOne({ age: 12 }, { age: 13 }) ``` > [color=#f23cf2] Substitua o primeiro documento que corresponde ao objeto de filtro com o objeto exato passado como o segundo parâmetro. este substituirá completamente o objeto inteiro e não apenas atualizar campos individuais. Substitua o primeiro usuário com 12 anos de idade por um objeto que tenha 13 anos como seu único campo ## Delete > [color=#ae5fd8] Cada um desses comandos é executado em uma coleção específica `db.<collectionName>.<command>` ### **deleteOne** ```mongosh=1 db.users.deleteOne({ age: 20 }) ``` > [color=#f23cf2] Excluir o primeiro documento que corresponde ao objeto de filtro. Excluir o primeiro usuário com 20 anos de idade ### **deleteMany** ```mongosh=1 db.users.deleteOne({ age: 12 }) ``` > [color=#f23cf2] Excluir todos os documentos que correspondem ao objeto de filtro. Excluir todos os usuários com idade de 12 anos ## Complex Filter Object > [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser usada dentro de um objeto de filtro para fazer consultas complexas ### **\$eq** ```mongosh=1 db.users.find({ name: { $eq: "Jonathan" } }) ``` > [color=#f23cf2] Verifique a igualdade. Obter todos os usuários com o nome Jonathan ### **\$ne** ```mongosh=1 db.users.find({ name: { $ne: "Jonathan" } }) ``` > [color=#f23cf2] Verifique se não é igual. Obter todos os usuários com um nome diferente de Jonathan ### **\$gt \/ \$gte** ```mongosh=1 db.users.find({ age: { $gt: 12 } }) db.users.find({ age: { $gte: 15 } }) ``` > [color=#f23cf2] Verifique se há maior que e maior ou igual a. Obter todos os usuários com idade superior a 12 anos Obter todos os usuários com idade maior ou igual a 15 anos ### **\$lt \/ \$lte** ```mongosh=1 db.users.find({ age: { $lt: 12 } }) db.users.find({ age: { $lte: 15 } }) ``` > [color=#f23cf2] Verifique se há menor e menor ou igual a. Obter todos os usuários com idade inferior a 12 anos Obter todos os usuários com idade menor ou igual a 15 anos ### **\$in** ```mongosh=1 db.users.find({ name: { $in: ["Maria Victória", "Jonathan"]} }) ``` > [color=#f23cf2] Verificar se um valor é um dos muitos valores. Obter todos os usuários com um nome de Maria Victória ou Jonathan ### **\$nin** ```mongosh=1 db.users.find({ name: { $nin: ["Maria Victória", "Jonathan"]} }) ``` > [color=#f23cf2] Verifique se um valor não é nenhum dos muitos valores. Obtenha todos os usuários que não têm o nome Maria Victória ou Jonathan ### **\$and** ```mongosh=1 db.users.find({ $and: [{ age: 12 }, { name: "Jonathan"}] }) db.users.find({ age: 12, name: "Jonathan" }) ``` > [color=#f23cf2] Verifique se várias condições são todas verdadeiras. Obtenha todos os usuários que tenham 12 anos e o nome Jonathan e uma maneira alternativa de fazer a mesma coisa. Geralmente você não precisa de $and. ### **\$or** ```mongosh=1 db.users.find({ $or: [{ age: 12 }, { name: "Jonathan"}] }) ``` > [color=#f23cf2] Verifique se uma das várias condições é verdadeira. Obter todos os usuários com um nome de Jonathan ou uma idade de 12 anos ### **\$not** ```mongosh=1 db.users.find({ name: { $not: { $eq: "Jonathan" } } }) ``` > [color=#f23cf2] Negue o filtro dentro de \$not. Obter todos os usuários com um nome diferente de Jonathan ### **\$exists** ```mongosh=1 db.users.find({ name: { $exists: true } }) ``` > [color=#f23cf2] Verifique se existe um campo. Obter todos os usuários que têm um campo de nome ### **\$expr** ```mongosh=1 db.users.find({ $expr: { $gt: ["$balance", "$debt"] } }) ``` > [color=#f23cf2] Faça comparações entre diferentes campos. Obtenha todos os usuários com saldo maior que a dívida. ### **\$size** ```mongosh=1 db.users.find({ hobbies: { $size: 2 } }) ``` > [color=#f23cf2] O $size corresponde a qualquer array com o número de elementos especificados pelo argumento. Retornar os usuários que tem 2 elementos no array de hobbies. ## Complex Update Object > [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser usada dentro de um objeto de atualização para fazer atualizações complexas ### **\$set** ```mongosh=1 db.users.updateOne({ age: 12 }, { $set: { name: "Davi" } }) ``` > [color=#f23cf2] Atualize apenas os campos passados para \$set. Isso não afetará quaisquer campos não passados para \$set. Atualize o nome do primeiro usuário com 12 anos para o valor Davi ### **\$inc** ```mongosh=1 db.users.updateOne({ age: 12 }, { $inc: { age: 2 } }) ``` > [color=#f23cf2] Incremente o valor do campo pelo valor fornecido. Adicione 2 à *age* do primeiro usuário com 12 anos ### **\$rename** ```mongosh=1 db.users.updateMany({}, { $rename: { age: "years" } }) ``` > [color=#f23cf2] Renomear um campo. Renomeie o campo *age* para *years* para todos os usuários ### **\$unset** ```mongosh=1 db.users.updateOne({ age: 12 }, { $unset: { age: "" } }) ``` > [color=#f23cf2] Remover um campo. Remove o campo *age* do primeiro usuário com 12 anos ### **\$push** ```mongosh=1 db.users.updateMany({}, { $push: { friends: "Ingrid" } }) ``` > [color=#f23cf2] Adicionar um valor a um campo de *array*. Adiciona Ingrid ao *array* de *friends* para todos os usuários ### **\$pull** ```mongosh=1 db.users.updateMany({}, { $pull: { friends: "João" } }) ``` > [color=#f23cf2] Remover um valor de um campo de *array* Remove o João do *array* de *friends* para todos os usuários ### **\$currentDate** ```mongosh=1 db.users.updateOne({ name: "Jonathan" }, { $currentDate: { date: true } }) ``` > [color=#f23cf2] Define o valor de um campo para a data atual, podendo ser do tipo date ou timestamp. O padrão é date. Atualizar o campo date do usuário Jonathan para a data atual. ## Read Modifiers > [color=#ae5fd8] Qualquer combinação dos itens abaixo pode ser adicionada ao final de qualquer operação de leitura ### **sort** ```mongosh=1 db.users.find().sort({ name: 1, age: -1 }) ``` > [color=#f23cf2] Ordenar os resultados de uma pesquisa pelos campos fornecidos. Ordernar todos os usuários por *name* em ordem alfabética e, se algum *name* for o mesmo a ordernação por *age* em ordem inversa ### **limit** ```mongosh=1 db.users.find().limit(2) ``` > [color=#f23cf2] Retorna apenas um número definido de documentos. Retorna apenas os 2 primeiros usuários ### **skip** ```mongosh=1 db.users.find().skip(4) ``` > [color=#f23cf2] Pule um número definido de documentos desde o início. Pule os primeiros 4 usuários ao retornar resultados. Isso é ótimo para paginação quando combinado com *limit*. ### **pretty** ```mongosh=1 db.users.find().pretty() ``` > [color=#f23cf2] Configura o cursor para exibir os resultados em um formato de fácil leitura. Retorna todos os usuários.