Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Mongodb Vol:00 Instalación y gestión básica


Instalaremos una versión de mongo >=3.2 ya que todos los ejemplos estarán basados en el curso M102 y si no tenemos la versión correcta algunos comandos fallarán.

https://university.mongodb.com/courses/MongoDB/M102/2017_May/discussion/forum/threads/5945d7091ee0d261bca95612

Looks like you are using an old version of MongoDB, please upgrade to MongoDB 3.2. Note that updateMany was introduced in MongoDB 3.2

A día de hoy(18/06/2017) la versión estable es: 3.0.14 por lo tanto nos tocará desenmascarar.

  • Gentoo: 3.0.14
  • Ubuntu: 2.6.10

Instalamos la versión 3.4.4(si la última versión inestable):

echo "dev-db/mongodb ~amd64" > /etc/portage/package.accept_keywords/mongodb
echo "app-admin/mongo-tools ~amd64" >> /etc/portage/package.accept_keywords/mongodb
emerge -av dev-db/mongodb

Las principales características a destacar sobre mongo son:

  • Velocidad eliminando funcionalidades(Dios los bendiga)
  • Sin joins
  • Sin transacciones

El equivalente MySQL -> Mongo sería:

  • Colección: Tabla
  • Documento: Fila

Una recomendación importante en mongo es no repetir el valor de las key en un json:

{
"name" : "John",
"age" : 25,
"name" : "Tom",
}

En mongo utilizán una representación de los datos llamada BSON:

  • Representación interna de los datos, de este modo Mongo opera internamente mas rápido.
  • En disco los datos están en BSON, por red también viajan en BSON y el driver de la app finalmente lo transforma a la estructura nativa de la app, NO tiene porque pasar por JSON.

Ahora que ya tenemos una idea básica sobre mongo procedemos con los comandos básicos y su equivalente en MySQL:

  • use pcat: create database pcat
  • db.runCommand( { create: "products" } ): Create table
  • show dbs: show databases
  • show collections: show tables

Queries:

db.products.find() -> SELECT * FROM products

NOTA: Lo bueno de mongo es que por defecto aplica un limit a las querys, si se quieren ver los siguientes registros debemos presionar "it", de este modo no acabremos nunca con una consola escupiendo datos de una colección(tabla) sin necesidad.

db.products.findOne() -> SELECT * FROM products limit 1
db.products.find().limit(3) -> SELECT * FROM products limit 3
db.products.count() -> SELECT COUNT(*) FROM products

Todas las queries en mongo siguen la siguiente sintaxis:

db.products.find({FILTRO},{CAMPOS_A_MOSTRAR})

Algunos ejemplos:

db.products.find({},{name:1,brand:1}) -> SELECT name,brand FROM products
db.products.find({name:12}) -> SELECT * FROM products WHERE name=12
db.products.find({name:33},{name:1,brand:1}) -> SELECT name,brand FROM products WHERE name=33
db.products.find({price:{$gte:33}},{name:1,price:1}) -> SELECT name,price FROM products WHERE price >= 33
db.products.find({price:{$gte:33}, name:{12}},{name:1,price:1}) -> SELECT name,price FROM products WHERE price >= 33 AND name=12
db.products.find({},{name:1,brand:1}).sort({price:1}) -> Ordena por precio ascendente
db.products.find({},{name:1,brand:1}).sort({price:-1}) -> Ordena por precio descendente

NOTA: El orden de los documentos NO tiene porque ser el mismo en las DBs de los miembros de un replicaset, si queremos que el orden sea el mismo debemos ordenar.

Todos los documentos de una colección NO tienen porque tener los mismos campos, en la siguiente query consultamos los documentos donde exista un campo:

db.products.find({price: {$exist: true}}) -> SELECT * FROM products WHERE EXISTE price

El uso de cursores evita reventar el server cuando se hacen queries sin cabeza, no se sirven un millón de resultados si no que se sirven unos cuantos y utilizando el cursor se piden los siguientes, de este modo el server no explota por una query incorrecta.

var cursor = db.products.find()
cursor.next() -> Muestra los datos obtenidos de uno en uno

Algo realmente útil es la ayuda de Mongo, por ejemplo:

db.products.find().help()

Escribir db.COLECCION.COMANDO puede ser un poco tedioso, podemos hacer lo siguiente:

t = db.sample
t.find()

NOTA: Mongo tiene un límite de 16MB por documento, esto se impone para evitar que un programador almacene animaladas, además cuando se pida el documento por red solo viajarán los 16MB.

En mas de una ocasión nos hará falta importar datos desde un json, es tan sencillo como:

mongoimport --db pcat --collection products --drop --file products.3eb7cd1a9633.json

Autor: Kr0m -- 19/06/2017 23:06:21