jueves, 19 de septiembre de 2013

Como actualizar un documento en MongoDB desde Node.js

En el articulo anterior vimos como consultar documentos de MongoDB en Node.js, hoy os vamos a explicar como buscar un documento en concreto y actualizarlo.

Vamos a usar la colección de ventas del ejemplo anterior, ventas.json y el mismo proyecto. El objetivo va a ser añadir un nuevo articulo vendido por "Julia Romero". Por lo que vamos a editar el fichero app.js y añadir el siguiente código:
var MongoClient = require('mongodb').MongoClient;

//Conexion con MongoDB -> servidor:puerto/nombreBasedeDatos
MongoClient.connect('mongodb://localhost:27017/supermercado', function(err,db){
    if(err) throw err;
    //Vamos a buscar a la vendedora Julia Romero
    var query = {"vendedor" : "Julia Romero"}
    //Vamos a añadir un nuevo artículo vendido, 
    //Para ello usamos la funcion push para insertar un un item al array artículos.  
    var nuevo_elemento = {$push : {"articulos" : {articulo: "cuaderno hispabigdata", "pvp" : 25 }}};
    //Creamos la variable coleccion
    var coleccion = db.collection('ventas');
    //Actualizamos el documento
    coleccion.update(query, nuevo_elemento, function(err, doc){
        if(err) throw err;
        //Mostramos mensaje indicando que el documento con ID X se ha actualizado
        console.dir("Coleccion con ID: " + doc + " actualizada correctamente");
        //Cerramos la conexión a la base de datos.
        return db.close();
    });
});
Como podéis observar en el código hemos cambiado la variable query para que busque a la vendedora indicada y en la variable nuevo elemento hemos añadido el nuevo articulo haciendo uso de la función $push la cual nos permite insertar un elemento nuevo en un array en este caso al array artículos.

A diferencia del ejemplo anterior, no hemos tenido que hacer uso de un cursor, ya que solo nos interesaba actualizar el documento que cumplía con la condición indicada en la variable query.

Si ejecutamos el proyecto
node app.js
Ejecucion apliacion por HispaBigData


Vemos como aparece el mensaje indicando que se ha actualizado correctamente el documento, para comprobarlo vamos a abrir una consola en mongo y vamos a realizar la consulta:
use supermercado;
db.ventas.find({_id:1}).pretty()
Resultado por HispaBigData
Ahora tenemos añadido el nuevo articulo que queríamos insertar. ¿Que hubiese ocurrido si en la colección tenemos dos vendedores con el mismo nombre? Pues que el articulo se añade a cada documento que encuentre en la colección, por lo que es muy importante asegurarnos de realizar las búsquedas por un campo único.

No hay comentarios:

Publicar un comentario