{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Conectando ao MongoDB usando Python" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from pymongo import MongoClient\n", "from pprintpp import pprint\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'thedatasocietydb')\n" ] } ], "source": [ "mongoclient = MongoClient('localhost', 27017)\n", "db = mongoclient.thedatasocietydb\n", "print(db)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# CRUD MongoDB usando Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Create - insert()\n", "\n", "* Não há regras de validação rígidas: qualquer tipo de documento pode ser armazenado no banco de dados. \n", "\n", "* Na prática, somente objetos semelhantes são armazenados na base de dados, porém se um dia aparecer um novo atributo, poderemos inclui-lo apenas nos documentos aonde o mesmo é necessário, ao contrário do modelo relacional, onde uma nova coluna seria necessária e seria aplicada a todos os registros.\n", "\n", "* Desvantagem: \n", "\n", " * Cuidado para que as bases de dados não virem uma grande confusão (vão virar, aceite desde o início)\n", " \n", " \n", "* Vantagens:\n", "\n", " * Temos uma abordagem n-dimensional para representar objetos (bem… o mundo muda)\n", " \n", " * Facilidade de alteração da estrutura de dados (refatoração fria)\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ObjectId('5f2e29cab7f5ee4d9e5cb838')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Insere um documento na coleção autores\n", "documento1 = {\n", " \"idade\": 25,\n", " \"nome\":\"Joao\"\n", " }\n", "\n", "db.autores.insert_one(documento1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ObjectId('5f2e29cab7f5ee4d9e5cb839')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Insere outro documento com estrutura diferente em autores\n", "\n", "db.autores.insert_one(\n", " {\n", " \"nome\": \"Joaquim\",\n", " \"idade\": 30,\n", " \"cidade\": \"Campinas\"\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ObjectId('5f2e29cab7f5ee4d9e5cb83a')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Insere outro documento com estrutura diferente em autores\n", "\n", "db.autores.insert_one(\n", " {\n", " \"nome\": \"Maria\",\n", " \"poemaPreferido\": \"Desejo – Victor Hugo\",\n", " \"familia\":{\n", " \"pai\": \"Isaac Mato\",\n", " \"mae\": \"Junia Lito\"\n", " }\n", " }\n", "\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ObjectId('5f2e29cab7f5ee4d9e5cb83b')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Insere documento com estrutura diferente que possui outro documento (publicacao) embutido (embedded)\n", "\n", "db.autores.insert_one(\n", " {\n", " \"nome\": \"Horacio\",\n", " \"cidade\": \"Campinas\", \n", " \"publicacao_principal\": { \n", " \"tipo\": \"livro\",\n", " \"titulo\": \"Vida dos Dinossauros\",\n", " \"ano\": 2010\n", " },\n", " \"familia\": {\n", " \"pai\": \"Joao Silva\",\n", " \"mae\": \"Marta Figo\"\n", " }\n", " }\n", ")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ObjectId('5f2e29cab7f5ee4d9e5cb83c')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Insere outro documento que possui outro documento (publicacao) embutido (embedded)\n", "\n", "db.autores.insert_one(\n", " {\n", " \"nome\": \"Tenario\",\n", " \"cidade\": \"Campinas\", \n", " \"publicacao_principal\": { \n", " \"tipo\": \"artigo\",\n", " \"titulo\": \"Ser ou não ser?\",\n", " \"ano\": 1874\n", " },\n", " \"familia\": {\n", " \"pai\": \"Tulio Primeiro\",\n", " \"mae\": \"Algonia Kino\"\n", " }\n", " }\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### insert_many()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.inventory.insert_many(\n", " [\n", " { \"item\": \"journal\", \"qty\": 25, \"tags\": [\"blank\", \"red\"], \"size\": { \"h\": 14, \"w\": 21, \"uom\": \"cm\" } },\n", " { \"item\": \"mat\", \"qty\": 85, \"tags\": [\"gray\"], \"size\": { \"h\": 27.9, \"w\": 35.5, \"uom\": \"cm\" } },\n", " { \"item\": \"mousepad\",\"qty\": 25, \"tags\": [\"gel\", \"blue\"], \"size\": { \"h\": 19, \"w\": 22.85, \"uom\": \"cm\" } }\n", " ])\n", "# usar .inserted_ids no objeto de retorno para saber os ids inseridos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Alterando o _id" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'autor-14'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.autores.insert_one({ \n", " \"_id\": \"autor-14\", \n", " \"nome\": \"Malaquias\", \n", " \"cidade\": \"Campinas\",\n", " \"idade\": 78 \n", " } \n", ")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({\"autor\": \"Malaquias\"})\n", "list(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Find\n", "\n", " " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{ \"_id\" : ObjectId(\"5f2e29cab7f5ee4d9e5cb838\"), \"idade\" : 25, \"nome\" : \"Joao\" }\n", "{ \"_id\" : ObjectId(\"5f2e29cab7f5ee4d9e5cb839\"), \"nome\" : \"Joaquim\", \"idade\" : 30, \"cidade\" : \"Campinas\" }\n", "{ \"_id\" : ObjectId(\"5f2e29cab7f5ee4d9e5cb83a\"), \"nome\" : \"Maria\", \"poemaPreferido\" : \"Desejo – Victor Hugo\", \"familia\" : { \"pai\" : \"Isaac Mato\", \"mae\" : \"Junia Lito\" } }\n", "{ \"_id\" : ObjectId(\"5f2e29cab7f5ee4d9e5cb83b\"), \"nome\" : \"Horacio\", \"cidade\" : \"Campinas\", \"publicacao_principal\" : { \"tipo\" : \"livro\", \"titulo\" : \"Vida dos Dinossauros\", \"ano\" : 2010 }, \"familia\" : { \"pai\" : \"Joao Silva\", \"mae\" : \"Marta Figo\" } }\n", "{ \"_id\" : ObjectId(\"5f2e29cab7f5ee4d9e5cb83c\"), \"nome\" : \"Tenario\", \"cidade\" : \"Campinas\", \"publicacao_principal\" : { \"tipo\" : \"artigo\", \"titulo\" : \"Ser ou não ser?\", \"ano\" : 1874 }, \"familia\" : { \"pai\" : \"Tulio Primeiro\", \"mae\" : \"Algonia Kino\" } }\n", "{ \"_id\" : \"autor-14\", \"nome\" : \"Malaquias\", \"cidade\" : \"Campinas\", \"idade\" : 78 }\n" ] } ], "source": [ "# Lista todos os documentos da coleção autores usando Mongo Shell\n", "\n", "! mongo --quiet --eval 'db.autores.find({});' thedatasocietydb" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb838'), 'idade': 25, 'nome': 'Joao'},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb839'),\n", " 'nome': 'Joaquim',\n", " 'idade': 30,\n", " 'cidade': 'Campinas'},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'}},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'nome': 'Horacio',\n", " 'cidade': 'Campinas',\n", " 'publicacao_principal': {'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " 'ano': 2010},\n", " 'familia': {'pai': 'Joao Silva', 'mae': 'Marta Figo'}},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83c'),\n", " 'nome': 'Tenario',\n", " 'cidade': 'Campinas',\n", " 'publicacao_principal': {'tipo': 'artigo',\n", " 'titulo': 'Ser ou não ser?',\n", " 'ano': 1874},\n", " 'familia': {'pai': 'Tulio Primeiro', 'mae': 'Algonia Kino'}},\n", " {'_id': 'autor-14', 'nome': 'Malaquias', 'cidade': 'Campinas', 'idade': 78}]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lista todos os documentos da coleção autores usando Python\n", "\n", "result = db.autores.find()\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb838'), 'idade': 25, 'nome': 'Joao'},\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb839'),\n", " 'cidade': 'Campinas',\n", " 'idade': 30,\n", " 'nome': 'Joaquim',\n", " },\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'familia': {'mae': 'Junia Lito', 'pai': 'Isaac Mato'},\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " },\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Marta Figo', 'pai': 'Joao Silva'},\n", " 'nome': 'Horacio',\n", " 'publicacao_principal': {\n", " 'ano': 2010,\n", " 'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " },\n", " },\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83c'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Algonia Kino', 'pai': 'Tulio Primeiro'},\n", " 'nome': 'Tenario',\n", " 'publicacao_principal': {\n", " 'ano': 1874,\n", " 'tipo': 'artigo',\n", " 'titulo': 'Ser ou não ser?',\n", " },\n", " },\n", " {\n", " '_id': 'autor-14',\n", " 'cidade': 'Campinas',\n", " 'idade': 78,\n", " 'nome': 'Malaquias',\n", " },\n", "]\n" ] } ], "source": [ "# Lista todos os documentos da coleção autores\n", "\n", "result = db.autores.find()\n", "\n", "# usando a função pretty print\n", "pprint( list(result) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Condição de igualdade\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'}}]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lista os documentos de autores com nome = Maria\n", "\n", "result = db.autores.find({\"nome\": \"Maria\"})\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'nome': 'Maria', 'poemaPreferido': 'Desejo – Victor Hugo'}]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lista poemaPreferido de documentos de autores com nome = Maria\n", "\n", "result = db.autores.find(\n", " {\n", " \"nome\": \"Maria\"\n", " }, \n", " {\n", " \"_id\": 0,\n", " \"nome\":1,\n", " \"poemaPreferido\": 1\n", " }\n", " )\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Marta Figo', 'pai': 'Joao Silva'},\n", " 'nome': 'Horacio',\n", " 'publicacao_principal': {\n", " 'ano': 2010,\n", " 'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " },\n", " },\n", "]\n" ] } ], "source": [ "# Lista documentos de autores com tipo da publicacao = livro\n", "\n", "result = db.autores.find({\"publicacao_principal.tipo\": \"livro\"})\n", "\n", "# list(result) \n", "pprint( list(result))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Marta Figo', 'pai': 'Joao Silva'},\n", " 'nome': 'Horacio',\n", " 'publicacao_principal': {\n", " 'ano': 2010,\n", " 'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " },\n", "}\n", "{\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83c'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Algonia Kino', 'pai': 'Tulio Primeiro'},\n", " 'nome': 'Tenario',\n", " 'publicacao_principal': {\n", " 'ano': 1874,\n", " 'tipo': 'artigo',\n", " 'titulo': 'Ser ou não ser?',\n", " },\n", "}\n" ] } ], "source": [ "# Documentos de autores com tipo = livro e ano entre 2000 e 2015\n", "\n", "result = db.autores.find(\n", " {\n", " \"publicacao_principal.tipo\": {\"$in\":[\"artigo\",\"livro\"]},\n", " \"publicacao_principal.ano\": {\"$gt\": 1500, \"$lt\": 2016}\n", " }\n", " )\n", "for document in result: \n", " pprint(document)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Operadores Lógicos" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'nome': 'Horacio',\n", " 'cidade': 'Campinas',\n", " 'publicacao_principal': {'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " 'ano': 2010},\n", " 'familia': {'pai': 'Joao Silva', 'mae': 'Marta Figo'}}]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find(\n", " {\n", " \"$or\": [ \n", " { \"publicacao_principal.ano\": {\"$gt\" : 1999, \"$lt\": 2016} }, \n", " { \"publicacao_principal.ano\": {\"$gte\": 1980, \"$lt\": 1991} } \n", " ] \n", " }\n", ")\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb838'), 'idade': 25, 'nome': 'Joao'}]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({\"idade\" : {\"$in\" : [25, 42, 80]}})\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb838'), 'idade': 25, 'nome': 'Joao'},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb839'),\n", " 'nome': 'Joaquim',\n", " 'idade': 30,\n", " 'cidade': 'Campinas'},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'nome': 'Horacio',\n", " 'cidade': 'Campinas',\n", " 'publicacao_principal': {'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " 'ano': 2010},\n", " 'familia': {'pai': 'Joao Silva', 'mae': 'Marta Figo'}},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83c'),\n", " 'nome': 'Tenario',\n", " 'cidade': 'Campinas',\n", " 'publicacao_principal': {'tipo': 'artigo',\n", " 'titulo': 'Ser ou não ser?',\n", " 'ano': 1874},\n", " 'familia': {'pai': 'Tulio Primeiro', 'mae': 'Algonia Kino'}},\n", " {'_id': 'autor-14', 'nome': 'Malaquias', 'cidade': 'Campinas', 'idade': 78}]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({\"$or\" : [\n", " {\"idade\" : {\"$in\" : [25, 42, 80] } },\n", " {\"cidade\": \"Campinas\"}\n", " ]\n", " }\n", ")\n", "list(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Operadores de Elementos" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'), 'nome': 'Maria', 'poemaPreferido': 'Desejo – Victor Hugo', 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'}}]\n" ] } ], "source": [ "result = db.autores.find(\n", " {\n", " \"poemaPreferido\": { \"$exists\": True}\n", " }\n", " )\n", "print( list(result) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Count" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.autores.count_documents({})" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.autores.count_documents({\"nome\":\"Horacio\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Limit" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb838'), 'idade': 25, 'nome': 'Joao'},\n", " {'_id': ObjectId('5f2e29cab7f5ee4d9e5cb839'),\n", " 'nome': 'Joaquim',\n", " 'idade': 30,\n", " 'cidade': 'Campinas'}]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({}).limit(2)\n", "\n", "list(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Distinct\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Horacio', 'Joao', 'Joaquim', 'Malaquias', 'Maria', 'Tenario']" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.distinct(\"nome\")\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Ser ou não ser?', 'Vida dos Dinossauros']" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.distinct(\"publicacao_principal.titulo\")\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Horacio', 'Joaquim', 'Malaquias', 'Tenario']" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({\"cidade\":\"Campinas\"}).distinct(\"nome\")\n", "list(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Update" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Atualiza cidade de autor = Joaquim\n", "\n", "db.autores.update_one(\n", " { \"nome\" : \"Joaquim\" },\n", " { \"$set\": { \n", " \"cidade\": \"Ilheus\" \n", " } \n", " }\n", ")\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb839'),\n", " 'nome': 'Joaquim',\n", " 'idade': 30,\n", " 'cidade': 'Ilheus'}]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({ \"nome\" : \"Joaquim\" })\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'}}]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({ \"nome\" : \"Maria\" })\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Adiciona atributo cidade ao autor de nome = Maria\n", "\n", "db.autores.update_one(\n", " {\"nome\": \"Maria\"}, \n", " {\"$set\": {\"cidade\": \"Campinas\"}}\n", ")" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'},\n", " 'cidade': 'Campinas'}]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({ \"nome\" : \"Maria\" })\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Exclui atributo poemaPreferido ao autor de nome = Maria\n", "db.autores.update_one(\n", " {\"nome\": \"Maria\"}, \n", " {\"$unset\": {\"poemaPreferido\": 1}}\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'familia': {'pai': 'Isaac Mato', 'mae': 'Junia Lito'},\n", " 'cidade': 'Campinas'}]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({ \"nome\" : \"Maria\" })\n", "\n", "list(result)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'publicacao_principal': {'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " 'ano': 2014}}]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = db.autores.find({ \"nome\" : \"Maria\" })\n", "\n", "list(result)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Operadores Update\n", "\n", "* **upsert**: Opcional. Se = true, cria um novo documento quando não encontra um que atende ao critério de busca. Default = false.\n", "\n", "* **multi:** Opcional. Se = true, atualiza todos os documentos que atendem ao critério de busca. Se = false, atualiza apenas o primeiro documento. Default = false." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n': 2, 'nModified': 2, 'ok': 1.0, 'updatedExisting': True}" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Atualiza todos os documentos com titulo Vida dos Dinossauros\n", "db.autores.update_one(\n", " { \"publicacao_principal.titulo\":\"Vida dos Dinossauros\"},\n", " { \"$set\": {\"publicacao_principal.ano\": 2020}},\n", " upsert=False, \n", " multi=True \n", ")" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83a'),\n", " 'nome': 'Maria',\n", " 'poemaPreferido': 'Desejo – Victor Hugo',\n", " 'publicacao_principal': {\n", " 'ano': 2020,\n", " 'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " },\n", " },\n", " {\n", " '_id': ObjectId('5f2e29cab7f5ee4d9e5cb83b'),\n", " 'cidade': 'Campinas',\n", " 'familia': {'mae': 'Marta Figo', 'pai': 'Joao Silva'},\n", " 'nome': 'Horacio',\n", " 'publicacao_principal': {\n", " 'ano': 2020,\n", " 'tipo': 'livro',\n", " 'titulo': 'Vida dos Dinossauros',\n", " },\n", " },\n", "]\n" ] } ], "source": [ "result = db.autores.find({ \"publicacao_principal.titulo\" : \"Vida dos Dinossauros\" })\n", "\n", "pprint( list(result) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Remove" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.autores.count()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'n': 1, 'ok': 1.0}" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Exclui documento cujo autor = Maria\n", "\n", "db.autores.remove({\"nome\": \"Maria\"})" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "db.autores.count()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Exclui todos os documentos da coleção\n", "\n", "# db.autores.remove({})" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "toc-autonumbering": true }, "nbformat": 4, "nbformat_minor": 4 }