MONGO_DB

MongoDB é um banco de dados orientado a documentos, é de código aberto, gratuito e de alta performance. Foi escrito na linguagem de programação C++, o que o torna multiplataforma. Classificado como um programa de banco de dados NoSQL, o MongoDB usa documentos semelhantes a JSON com esquemas. É desenvolvido pela MongoDB Inc. e publicado sob uma combinação da GNU Affero General Public License e Licença Apache. Suas características permitem com que as aplicações modelem informações de modo muito mais natural, pois os dados podem ser aninhados em hierarquias complexas e continuar a ser indexáveis e fáceis de buscar.

Acesse meu github para consultar a documentação completa, lá você encontrará, além desta documentação, alguns exemplos de python funcional utilizando o mongoDB e a pymongo.

OBS: Para esta documentação foi utilizado um cluster no mongodb cloud.

Install


#  No terminal 

$ python -m pip install pymongo
$ python -m pip install pymongo[srv]

Import

from pymongo import MongoClient
from pprint import pprint

OBS: A biblioteca pprint foi utilizada para que o outputs fossem estilizados semelhantes formato json.

Connect

connection = MongoClient("mongodb+srv://login:senha@cluster0-5ueib.mongodb.net/test?retryWrites=true&w=majority")

Create - DB

Criando o banco de dados "moonlightDB" e instanciando uma variavel de mesmo nome a ele.

#Estabelecendo a conexão 
connection = MongoClient("mongodb+srv://login:senha@cluster0-5ueib.mongodb.net/test?retryWrites=true&w=majority")

#Criando um DB
moonlightDB = connection["moonlightDB"]

Create - Collection

Criando uma coleção (Tabela) "heroes" e instanciando uma variavel de mesmo nome a esta coleção.


#Estabelecendo a conexão 
connection = MongoClient("mongodb+srv://login:senha@cluster0-5ueib.mongodb.net/test?retryWrites=true&w=majority")

#Criando um DB
moonlightDB = connection["moonlightDB"]

#Criando uma colection
heroes = moonlightDB["heroes"]

OBS: No MongoDB, um banco de dados e uma coleção não é criada até obter conteúdo! O MongoDB aguarda até que você tenha inserido um documento antes que ele realmente crie a coleção.

Create - document

Criando um documento (Paladino) e inserindo ele em uma coleção (heroes):


#Estabelecendo a conexão 
connection = MongoClient("mongodb+srv://login:senha@cluster0-5ueib.mongodb.net/test?retryWrites=true&w=majority")

#Criando um DB
moonlightDB = connection["moonlightDB"]

#Criando uma colection
heroes = moonlightDB["heroes"]

#Criando um documento
Paladino = { "name": "Jonathan", 
            "Classe": "paladino",
            "força": 21, 
            "defesa": 19, 
            "arma": "espada longa",
            "poder1": "ataque divino",
            "poder2": "cura pelas mãos" }

inserColeçao = heroes.insert_one(Paladino)
print(inserColeçao.inserted_id)

Criando vários documentos e inserindo eles em uma coleção (Tabela):

variosHerois = [{ "name": "Leda", 
                "Classe": "mago de fogo",
                "força": 18, 
                "defesa": 13, 
                "arma": "cajado",
                "poder1": "bola de fogo",
                "poder2": "chuva de meteoro" },

                { "name": "Anny", 
                "Classe": "animal",
                "força": 11, 
                "defesa": 15, 
                "arma": "guarra",
                "poder1": "furtividade",
                "poder2": "guarras afiadas" },

                { "name": "Nick", 
                "Classe": "animal",
                "força": 15, 
                "defesa": 14, 
                "arma": "mordida",
                "poder1": "velocidade",
                "poder2": "mordida frontal" },
]

inserindoTudo = heroes.insert_many(variosHerois)

print(inserindoTudo.inserted_ids)

Criando um documento com ID. Lembre-se, dois documentos NÃO podem ter o mesmo ID.

# Paladino = { "_id": 1,
#             "name": "Jonathan",
#             "Classe": "paladino",
#             "força": 24,
#             "defesa": 19,
#             "arma": "espada longa",
#             "poder1": "ataque divino",
#             "poder2": "cura pelas mãos" }

# inserColeçao = heroes.insert_one(Paladino)
# print(inserColeçao.inserted_id)

Posso criar documentos com mais {chave: valor} em uma mesma colection.

Paladino = { "_id": 2,
            "name": "Trevor",
            "Classe": "Knight",
            "força": 24,
            "defesa": 19,
            "arma": "espada longa",
            "poder1": "ataque divino",
            "poder2": "cura pelas mãos",
            "poder3": "Espada da noite" }

inserColeçao = heroes.insert_one(Paladino)
print(inserColeçao.inserted_id)

Select - Data Base

Listando e buscando banco de dados em minha conta mongoDB. Lembrando que minha conexão está com o nome de "coonection"

pprint (connection.list_database_names())
dblist = connection.list_database_names()
if "moonlightDB" in dblist:
  print("O banco de dados existe.")
else:
    print ("O banco de dados não existe.")

Select - Collection

Listando e buscando coleções (Tabelas) no meu banco de dados "moonlight".

pprint (moonlightDB.list_collection_names())
collist = moonlightDB.list_collection_names()
if "heroes" in collist:
  print("A coleção existe.")

Contando o número de documentos dentro da minha colection

pprint(heroes.count_documents({}))

Select - Docment

Selecionando o primeiro documento da coleção (heroes)

pprint(heroes.find_one())

Selecionando um documento por {chave: Valor}:

pprint(heroes.find_one({"arma": "mordida"}))

Selecionando todos os documentos da minha coleção:

for personagens in heroes.find():
    pprint(personagens)

Selecionando todos os documentos da minha coleção (Número limitado)

selLimite = heroes.find().limit(5)
for x in selLimite:
  pprint(x)

Selecionando todos os documentos que possuem uma mesma {chave:valor} selecionada:

for animais in heroes.find({"classe": "animal"}):
    pprint(animais)

Selecionando o nome e a arma de todos os documentos. Só posso atribuir falso (0) para o id, pois ele é o unico que aparece mesmo quando não mensionado.

for nomes in heroes.find({},{ "_id": 0, "name": 1, "arma": 1 }):
  pprint(nomes)


#Neste caso o ID, aparecerá também. 
for armas in heroes.find({},{ "name": 1, "arma": 1 }):
  pprint(armas)

#Neste caso o id não aparecerá.
for classes in heroes.find({},{ "_id": 0, "classe": 1, "name": 1, "arma": 1 }):
  pprint(classes)

Instanciando uma busca.

cajado = { "arma": "cajado" }
busca = heroes.find(cajado)

for x in busca:
  pprint(x)

Buscar os documento em que o valor da chave nome comessem com a letra T ou posterior no alfabeto. (T, U, V, ...). Lembrando que os nomes estão em maiúscula. A mesma busca pode ser feita por regex: letraJ = { "name": { "$regex": "^S" } }


letraJ = { "name": { "$gt": "T" } }
busca = heroes.find(letraJ)

for x in busca:
  pprint(x)



# >>>>>> Selecionando os documentos por ordem alfabética (nome):
nomePorOredem = heroes.find().sort("name")

for x in nomePorOredem:
  pprint(x)


# >>>>>> Selecionando por ordem decrescente. Para o caso de ordem crescente substituir o -1 por 1.
ordemDecrescente = heroes.find().sort("name", -1)

for x in ordemDecrescente:
  pprint(x)

Delete - Document

Deleta o primeiro documento com o nome selecionado

delNome = { "name": "Jonathan" }

heroes.delete_one(delNome)

Deletando vários documentos e retornando o número de documentos deletados.

delVarios = { "name": {"$regex": "^N"} }
deletados = heroes.delete_many(delVarios)
print(deletados.deleted_count)

Deletando todos os documentos de uma coleção:

delTodos = heroes.delete_many({})
print(delTodos.deleted_count)

Delete - Collection

heores.drop()

Update - Values

Alterando valores de um documento:

valorAntigo = { "name": "Trevor" }
novoValor = { "$set": { "name": "Belmont" } }
heroes.update_one(valorAntigo, novoValor)

Referências:

  • https://pt.wikipedia.org/wiki/MongoDB
  • https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/
  • https://codehandbook.org/pymongo-tutorial-crud-operation-mongodb/
  • https://www.w3schools.com/python/python_mongodb_getstarted.asp
  • https://imasters.com.br/banco-de-dados/mongodb-para-iniciantes-em-nosql
  • https://api.mongodb.com/python/current/tutorial.html
  • https://pypi.org/project/pymongo/