Mongo DB

Operaciones CRUD

Insert

Para insertar documentos en MongoDB se usa el comando insert, donde se especifican todos los campos y datos de éstos, se usa de la siguiente manera:

db.people.insert({"name" : "Jason", "age":20})
// WriteResult({"nInserted" : 1})

Find

Para ver los documentos en una colección se usa el comando find y lo usaremos en este momento para ver el dato recién agregado de la sieguiente manera:

db.people.find()
// {"_id" : "12as78d6a7sd76as", "name" : "Jason", "age" : "20" }

Como podemos notar se crea un id único automáticamente al agregar un documento a la colección.

FindOne

También tenemos el comando findOne, el cual nos devuelve únicamente un resultado. Tanto el comando find, como el comando findOne, pueden especificar exactamente lo que se quiere buscar dentro del paréntecis, podemos buscar un campo y un atributo de la siguiente manera, tomando como ejemplo el ejericio anterior:

db.people.findOne({"name":"Jason"})
// {"_id" : "12as78d6a7sd76as", "name" : "Jason", "age" : "20" }

Es posible especificar los datos con más de un campo, por ejemplo:

db.people.findOne({"name":"Jason", "age":"20"})
// {"_id" : "12as78d6a7sd76as", "name" : "Jason", "age" : "20" }

También es posible mostrar solo un campo o dos, depende los que se quieran ver necesariamente, esto es posible agregando valores true o false, por ejemplo, si queremos mostrar solo el nombre del ejemplo anterior, sería así:

db.people.findOne({ "name":"Jason" },{ "name": true, "_id":false })
// {"name" : "Jason"}

Una manera rápida y potente de insertar documentos en una colección es a partir de un ciclo usando javascript, un ejemplo un poco mas complejo sería de la siguiente manera:

for (i=0; i<3; i++) { names = [“exam”, “essay”, “quiz”]; for ( j=0; j<3; j++ ) { db.scores.insert( { “student” : i, “type” : ”names[j], score : Math.round(Math.random()*100) } ); } }

En resumen, la sintaxis anterior imprimiría un estudiante con el nombre de un numero del 0 al 1000 por 3 tipos diferentes, exam, essay y quiz, y por ultimo un campo de puntaje que se crea al azar. En total serían 3000 documentos nuevos, cada uno con un id diferente y todo con solo una línea de código, de esta manera se pueden usar funciones javascript para insertar datos.

Si se realiza el ejercicio anterior, es posible "jugar" con la función find y prácticar un poco, como mostrar sólo ciertos campos y filtrar registros como mostrar solo los estudiantes que tienen tal puntaje.

Consultando Arreglos

Suponiendo que se tiene una coleccion de personas y una de esas personas tiene un arreglo dentro del valor email, por ejemplo, tiene un email personal y uno corporativo, al intentar buscarlo por un solo email no retornaría nada, por ejemplo:

db.people.find( { "email" : "[email protected]" } )
//nothing

Suponiendo que la persona que tenga un email como el del anterior ejemplo, pero también tenga otro, no va a retornar nada, debido a que estamos buscando un campo que contena exactamente lo que le pedimos, pero al ser un arreglo va a tener mas de un dato y no uno como lo estamos consultando, para eso debemos saber que campos tiene ese arreglo, y suponiendo que ese arreglo tiene dos campos, personal y corporativo, la manera correcta para consultar el email que buscamos es la siguiente:

db.people.find( { "email.personal" : "[email protected]" } )
//{"_id" : "12as78d6a7sd76as", "name" : "Jason", "email" : { "personal":"[email protected]", "corporativo":"[email protected]"} }

.limit()

Es posible limitar la cantidad de documentos que devuelve la base de datos por ejemplo, al hacer una consulta, para eso simplemente se usa el comando .limit() y dentro del paréntesis va el numero de la cantidad de registros que se requieran, por ejemplo:

.count()

Se usa para contar la cantidad de documentos que hay dentro de una consulta y se usa muy similar que el comando find, podemos ver un ejemplo a continuación:

db.people.count({ "name" : "Jason"})
//1

En el ejemplo anterior, se imprime un numero 1 debido a que solo hay una persona con el nombre requerido en la consulta.

.pretty()

Con este comando podremos imprimir de forma más elegante y organizada los datos arrojados en el mongo shell, haciendo mucho mas legíble la información.

db.people.find().pretty()

/* El resultado de la anterior sentencia, será mostrado de la siguiente manera:

{
    "_id" : "12as78d6a7sd76as", 
    "name" : "Jason", 
    "email" : { 
        "personal":"[email protected]",
        "corporativo":"[email protected]"
    } 
}