Código del curso db.py
- Descargar e instalar Postman
- La URI de las colecciones de Postman usada para el proyecto está en Postman-platzi-mongo
- Importar colección dentro de Postman Instrucciones
La forma más simple de ejecutar el proyecto es instalando Anaconda.
# navegar hasta el directorio del proyecto
cd platzi-mongo
# crear un nuevo ambiente
conda create --name platzi-mongo
# activar el ambiente
conda activate platzi-mongo
# para desactivar el ambiente
conda deactivate
Si usas Python frecuentemente y tienes una versión 3.3+ no es necesario que instales Anaconda, crea un ambiente virtual con venv o virtualenv y sigue con el paso de instalar las dependencias.
Con el ambiente activado, instalar las dependencias:
pip install -r requirements.txt
Asegurate de reemplazar el valor de PLATZI_DB_URI por la URI de tu cluster en MongoDB Atlas
Windows es con set
export FLASK_APP=platzi-api
export FLASK_ENV=development
export PLATZI_DB_URI="MONGO-URI"
flask run
- Servidor online: Mongo Atlas
- Descargar mongo: Mongo Download Center
- Agregar la variable de entorno
- Conectar con la variable de conexión desde https://cloud.mongodb.com
show dbs
use nombredb
db.dropDatabase()
show collections
db.getCollectionNames()
db.createCollection("nombre_coleccion")
db.coleccion.drop()
Al hacer cada inserción, mongodb automáticamente generara un ID unico, similar al “auto_increment primary key”, pero este ID es del tipo ObjectId de mongodb y es alfanumérico, muy similar a sha1 o md5. Tambien podemos hacer inserciones mas complejas, todo lo que sea soportado por JSON y por BSON ( el formato de MongoDB, con algunos tipos agregados sobre el original JSON)
db.micoleccion.insert({"nombre":"Agustin","apellido":"Ramos","domicilio":"Tabasco"})
db.micoleccion.insert({"nombre":"Sebastian","apellido":"Ramos","domicilio":"Tabasco"})
db.micoleccion.insert({"nombre":"Leonardo","apellido":"Ramos","domicilio":"Tabasco"})
db.micoleccion.insert({"nombre":"Jennifer","apellido":"Jimenez","domicilio":"Tabasco"})
db.micoleccion.insert({"nombre":"Diana","apellido":"Jimenez","domicilio":"Tabasco"})
db.micoleccion.insert({"nombre":"Jeremias","apellido":"Escalante","domicilio":"Quintana Roo"})
Insertar muchos
db.inventory.insertMany(
[{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] },
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] },
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] },
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] },
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }]
)
db.micoleccion.find()
db.micoleccion.find({"apellido":"Ramos"})
db.micoleccion.find({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")})
db.micoleccion.update({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")},{$set:{"apellido":"Ramos Escalante"}})
db.micoleccion.remove({"_id":ObjectId("56c9a1ffbb6e73925f958b1a")})
db.micoleccion.remove()
No es necesario finalizar las consultas con “;” (punto y coma) No existe “describe mitabla”: Las colecciones en MongoDB no tienen una “estructura” fijada, por lo que en una colección incluso pueden haber registros que tengan ciertos “campos” y otros no, dicho esto, no se puede hacer una descripción de la colección.
// $or
db.inventory.find({$or: [{qty: {$gt: 25}}, {qty: {$lte: 15}}]})
// $gte
db.inventory.find({qty: {$gte: 25}})
// $size
db.inventory.find({tags: {$size: 2}})
db.survey.insertMany([
{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }
])
db.survey.find(
{ results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } }
)
db.survey.find(
{ results: { $elemMatch: { product: "xyz" } } }```
$addToSet
Tipos de índices:
- De un solo campo (Cuando nos interesa un campo)
- Compuestos
- Multi-llave
- Geoespaciales (Querys con Latitud y longitud, por geoposicionamiento)
- De texto (Busque da de texto)
- Hashed (Convertir valores en hash)
db.cursos.getIndexes()
db.cursos.createIndex({"nombre": "text"})
db.cursos.find({$text: {$search:"aws"}}, {nombre: 1})
db.cursos.find({$text: {$search:"aws"}})
db.cursos.find({$text: {$search:"aws"}}).pretty()
- One to one: Documentos embebidos
- One to many: Documentos embebidos cuando la información no va a cambiar muy frecuentemente y referencias cuando si.