Documentos de Académico
Documentos de Profesional
Documentos de Cultura
it happen
Operaciones CRUD en
MongoDB
eae.es
Para modificar título del PPT, cambiar pie de página
Índice
2
Para modificar título del PPT, cambiar pie de página
2. Operaciones de lectura
eae.es
3
Filtrar o recuperar los documentos de una colección bajo unas
determinadas condiciones.
1. Operaciones
de lectura Seleccionar campos de un documento.
Operaciones de lectura
• Consulta en Mongo DB
Operaciones de lectura
Operaciones de lectura
>db.lecturer.find({a:61})
{ "_id" : ObjectId("53172c1ea85874ad0f8f1caa"), "a" : 61,
"b" : ISODate("2014-03-05T13:52:30.099Z"), "c" : true, "d" :
"documento 61" }
Filtrar Operador
Documentos elemMatch
Operadores de
proyección
Otro operadores
1. Operaciones de lectura
Operadores de comparación
• Sintaxis
find({key: {$operador: value}})
• Operadores disponibles
$eq, $gt, $gte, $lt, $lte, $ne, $or, $and, $not, $nor
• Ejemplos
>find({key1: value1, key2: value2})
db.lecturer.find( {$and: [{ a: {$gt : 20}}, {b: {$lt : 30} } ] })
>find({$or: [{expresión1}, {expresión2}]})
db.lecturer.find( {$or: [{a: {$gt : 20}}, {b: {$lt : 30}} ] })
1. Operaciones de lectura
• Operadores disponibles
$all, $size, $in, $nin
• Ejemplos
>db.coleccion.find( {campo : {$in : ["Valor1" , "Valor 2"]} } )
>db.coleccion.find( {campo : {$nin : ["Valor1" , "Valor 2"]} } )
>db.coleccion.find( {campo : {$all : ["Valor1" , "Valor 2"]} } )
>db.coleccion.find( {campo : {$size : 4 } )
1. Operaciones de lectura
Otros operadores
• $exists, $type
db.coleccion.find( {campo : { $exists:true} ) Únicamente mostrará
los documentos cuyo campo exista.
Operador $elemMatch
• Permite imponer condiciones sobre los campos que están dentro de un
documento.
{ "_id" : ObjectId("53172c1ea85874ad0f8f1c6e"),
"campo1" : 1,
"campo2" :[ { "c1" : 1, "c2" : “valor2“ },
{ "c1" : 2, "c2" : “valor3“ },
{ "c1" : 3, "c2" : “valor4“ }
]
}
Cursores
• Los cursores son generados en el servidor y el shell o la aplicación a
través del driver se encargan de ir consumiendo los datos del cursor.
DBQuery.shellBatchSize = 10
Cursores
• Las operaciones de tipo find (), aggregate (), listIndexes y listCollections
devuelven un máximo de 16 megabytes por lote.
• Al crear un cursor los documentos se envían por lotes.
• Cuando se consumen todos los documentos del primer lote se pide nuevo
lote al cursor, pero ya los siguientes lotes serán de 16 MB
1. Operaciones de lectura
Cursores
• Por ejemplo:
• Si se realiza una petición al servidor, nos devuelve el
primer lote, pero si antes de solicitar el segundo lote se
ha eliminado un registro de éste por una operación de
borrado, el documento desaparecerá del segundo lote.
1. Operaciones de lectura
Cursores
• Hay métodos para obtener información del cursor.
• cursor.hasNext()
• cursor.next()
• cursor.count()
• cursor.length()
• cursor.forEach() cursor.toArray()
• Hay que tener cuidado con las funciones que consumen todo el cursor,
ya que se traen todos los documentos que éste contiene y puede generar
problemas de memoria si el número de documentos es muy elevado.
1. Operaciones de lectura
2. Operaciones de escritura
eae.es
22
2. Operaciones de escritura
a
2. Operaciones de escritura
Inserciones
Inserciones
Al insertar el número de campos no siempre debe coincidir
db.coleccion.insert( { campo1: "valor", campo2: 15 } )
db.coleccion.insert( { campo1: "valor"} )
Actualizaciones
• Las actualizaciones son atómicas por cada documento
individual
• Por defecto actualiza sólo 1 documento, en caso de querer
actualizar más de uno hay que indicárselo
• Mantiene el orden de los campos
2. Operaciones de escritura
Actualizaciones Sustitutivas
• Sustituye por completo un documento de una colección. No es lo
más normal
db.coleccion.update ( criterio , documento )
Actualización modificativa
• Modifica uno de los valores de un documento.
db.coleccion.update ( criterio , expresion )
• La expresión llevará los campos a modificar con el operador
$set con el campo que queremos modificar y su nuevo valor
• Actualizando un campo
• >db.coleccion.update( {campo1 : 1}, {$set: {
campo2: valor } );
• Actualizando varios campos
• >db.coleccion.update( {campo1 : 1}, {$set: {
campo2: valor , campo3:valor} );
• Para insertar un nuevo campo con poner el nombre del campo
que no existe y su valor es suficiente, al ejecutarse se añadirá ese
campo.
2. Operaciones de escritura
Operadores de escritura
Los operadores de escritura disponibles son
Operadores de escritura
• Operador $inc o de incremento aumenta el valor de un campo el numero
de veces que le indiques
{$inc: {campo : 1 }}, si el campo no existiera lo crea y le asocia
el valor del incremento
• Operador $unset. Elimina un campo
{$unset: {campo : "" }}
• Operador $rename. Modifica el nombre de un campo
{$rename: {campo : "nuevoNombre" }}
• Operador $mul multiplicador
{$mul: {campo : 1.1 }}
2. Operaciones de escritura
Operadores de escritura
• Operadores $min y $max, modifica un campo SOLO en el caso de que el
valor que le pasamos sea mayor ($max) o menor ($min) de lo que ya
existe para ese campo
Operadores de escritura
• Operador $currentDate, actualiza un campo fecha con la fecha actual.
Operadores de escritura
Operadores actualización arrays
Operadores de escritura
Operadores actualización arrays
Operadores de escritura
Operadores actualización arrays
• Operador $pull, elimina los valores que le pasamos que cumplan una
determinada condición con el operador $in
{$pull:
{array :
{$in : ["valor1", "valor2"] }
}
}
2. Operaciones de escritura
• Es decir añade los elementos que se le pasan y de todos los que hay en el
array se queda con aquellos que ordena el operador
2. Operaciones de escritura
…{$push: {
nombrearray : {
$each : ["valor1", "valor2"],
$position: 1 Añade en la posición 1 en vez de en la última
}
}
}
2. Operaciones de escritura
Operador $
• Sirve para modificar el primer elemento de un array que cumpla
una condición
Modifica la posición 2
db.coleccion.update( { campo1 : valor1, array : valor2 } , { $set: {
"array.2" : "valor 3" } } )
2. Operaciones de escritura
Operador $
Operación upsert
• Operación en la que primero se intenta actualizar un
documento existente y si no se puede se realiza una
inserción
Actualizaciones multiples
• Por defecto solo modifica el primer documento que
cumpla las condiciones.
Eliminar documentos
• Para eliminar los documentos de una colección
db.coleccion.remove(criterio)
• Si queremos eliminar todos los documentos
db.coleccion.remove({condicion}) Obtener los
documentos y eliminarlos uno a uno
db.coleccion.drop() Elimina la colección entera,
es más rápida pero también elimina los índices y habrá
que regenerarlos.
2. Operaciones de escritura
db.coleccion.findAndModify(
query: {criterio filtrado}, Condición
sort:{ criterio ordenación}, Ordenamiento
remove: <boolean> o update: {actualización} Son excluyentes y uno de los
dos obligatorio
new: <boolean> Controlo si devuelvo antes de actualizar o
después; true: después; false: antes
fields : {proyección} solo devuelve los campos que me interesan
upsert : <boolean> A true, si no encuentra hace insert
)
2. Operaciones de escritura
db.coleccion.findAndModify(
query: {criterio filtrado}, Condición
sort:{ criterio ordenación}, Ordenamiento
remove: <boolean> o update: {actualización} Son excluyentes y uno de los
dos obligatorio
new: <boolean> Controlo si devuelvo antes de actualizar o
después; true: después; false: antes
fields : {proyección} solo devuelve los campos que me interesan
upsert : <boolean> A true, si no encuentra hace insert
)
2. Operaciones de escritura
FIN UNIDAD
eae.es