Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modelamiento de datos con MongoDB

Modelamiento de datos con MongoDB

Esta presentación tuvo lugar en UIGV por motivo del FESOLI 2012.

Jorge Puente-Sarrín

October 27, 2012
Tweet

More Decks by Jorge Puente-Sarrín

Other Decks in Programming

Transcript

  1. Operaciones básicas Inserción: db.empleado.insert({"nombre": "Jorge Puente", "email": "[email protected]", "posicion": "Programador"});

    Consulta: db.empleado.find(); db.empleado.find({ "email": /^p/ }); Actualización: db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }); db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }, false); //upsert parameter db.empleado.update({ "email": "[email protected]" }, { “$set”: { "posicion": "Analista de calidad" } }, false, true); //multi parameter Eliminación: db.empleado.remove({"email": "[email protected]"}); db.empleado.remove();
  2. Herencia Cliente • Nombre • CorreoElectronico • Direccion • FechaRegistro

    Persona Natural • DNI Persona Jurídica • RUC • RazonSocial
  3. Herencia Cliente • Nombre • CorreoElectronico • Direccion • FechaRegistro

    Persona Natural • DNI Persona Jurídica • RUC • RazonSocial
  4. Colección de publicaciones: { "_id": ObjectId("4f9c31753d32831252000000"), "titulo": "Mi primera publicación"

    "slug": "mi-primera-publicacion", "texto": "Esta es mi primera publicación en el blog", "fecha": ISODate("2012-04-28T13:05:41.137Z") } Colección de "likes": { "_id": ObjectId("4f9c31753d32781252000000"), "postid": ObjectId(" 4f9c31753d32831252000000"), "fecha": ISODate("2012-04-28T13:49:33.512Z"), "usuarioid": ObjectId("508bd80e0337da2837a31db5") }, { "_id": ObjectId("4f9c31753d32565465000000"), "postid": ObjectId(" 4f9c31753d32831252000000"), "fecha": ISODate("2012-04-28T13:49:38.719Z"), "usuarioid": ObjectId("508bd81df98a40ca9f779c43") } Documentos vinculados
  5. Documentos embebidos Colección de publicaciones: { "_id": ObjectId("4f9c31753d32831252000000"), "titulo": "Mi

    primera publicación" "slug": "mi-primera-publicacion", "texto": "Esta es mi primera publicación en el blog", "fecha": ISODate("2012-04-28T13:05:41.137Z"), "likes": [ { "fecha": ISODate("2012-04-28T13:49:33.512Z"), "usuarioid": ObjectId("508bd80e0337da2837a31db5") }, { "fecha": ISODate("2012-04-28T13:49:38.719Z"), "usuarioid": ObjectId("508bd81df98a40ca9f779c43") } ] }
  6. Arrays embebidos y arrays de _id • Consulta sobre una

    colección. • $slice es muy útil para consultar partes del array embebido. • Natural e intuitivo. • Dificultad media para operaciones. • Límite de 16MB.
  7. Árbol embebido • Consulta sobre una sola colección. • Natural

    e intuitivo. • Mucha dificultad para operaciones. • Límite de 16MB.
  8. Normalizado • Mayor flexibilidad para el manejo de los datos.

    • Mayor facilidad para operaciones. • Costo en performance para consultas entre colecciones.
  9. Orden ascendente: db.empleado.ensureIndex({email:1}); Orden ascendente y descendente: db.empleado.ensureIndex({email:-1},{unique:true}); Índice disperso,

    se ignora el documentos al poseer el campo: db.empleado.ensureIndex({email:1},{unique:true, sparse:true}); Índice compuesto: db.empleado.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); Índice geoespacial: db.places.ensureIndex( { loc : "2d" } ) Índices
  10. • Schema design is different in MongoDB • Basic data

    design principals stay the same • Focus on how the apps manipulates data • Rapidly evolve schema to meet your requirements • Enjoy your new freedom, use it wisely :-) MongoDB Inc.