Buscando artículos sobre "MongoDB"
6-abril-2013
admin

Framework Aggregation en MongoDB

Algunos ejemplos (muy por encima) de uso de agregaciones en MongoDB son:

$sum: En este ejemplo se devuelve la suma del campo “pop” agrupado por “state”

db.zips.aggregate([
    {$group:
     {
     _id:  "$state",
     population:{$sum:"$pop"}
     }
    }
])

$max: En este ejemplo se devuelve el valor máximo del campo “pop” agrupado por “state”

db.zips.aggregate([
    {$group:
     {
     _id: "$state",
     pop:{$max:"$pop"}
     }
    }
])

$avg: En este ejemplo se devuelve el valor medio del campo “pop” agrupado por “state”

db.zips.aggregate([
    {$group:
     {
     _id: "$state",
     average_pop:{$avg:"$pop"}
     }
    }
])

$addToSet: En este ejemplo se devuelve las ciudades(city) agrupando los codigos postales (_id) en un array.

db.zips.aggregate([
    {$group:
     {
     _id: "$city",
     postal_codes:{$addToSet:"$_id"}
     }
    }
])

$project: Da nueva forma a una secuencia de documentos de cambio de nombre, agregar o eliminar campos

db.zips.aggregate([
    {$project:
     {
     _id:0,
     'city':{$toLower:"$city"},
     'pop':1,
     'state':1,
     'zip':'$_id'
     }
    }
])

$match: En este ejemplo se devuelven todas las ciudades que tienen más de 100 000 personas de bolación.

db.zips.aggregate([
    {$match:
     {
     pop: { $gt: 100000 }
     }
    }
])

Documentación oficial en MongoDB.org

Más Ejemplos

12-marzo-2013
admin

CRUD en Mongo

Algunas operaciones CRUD que se pueden realizar en mongo:

insert
Ejemplo que inserta una nueva entrada en la tabla “fruit”
db.fruit.insert({“name”:”apple”,”color”:”red”,”shape”:”round”});

findOne
Con esta instrucción se trae una única entrada.
db.people.findOne( { “name”:”Jones” },{ “name”:true, “_id”:false } ); //En este ejemplo solo se muestra el campo name (el restode campos no se mostrarían y el _id hay que quitarlo aparte.).
Otro Ejemplo
db.scores.find({“type”:”essay”, “score”:50},{“_id”:false, “student”:true});

Querying usando $gt y $lt (añadir ‘e’ para equal)
db.scores.find({“type”:”essay”, “score”:{$gte:50,$lt:66}});

Inequalities en strings
El ejemplo devuelve todos los users cuyo name empieza por una letra mayor o igual que F y además esa letra es menor o igual que Q.
db.users.find( { name : { $gte : “F” , $lte : “Q” } } );

$regex, $exists, $type
Con regex se pueden usar ^$ para completar expresiones
exists – debe ser true o false
type – es para buscar por tipo de campo http://docs.mongodb.org/manual/reference/operator/type/
Ejemplo de uso:
db.users.find( { name:{$regex:”q”}, email:{$exists:true} } );

$or, $and, $in y $all
db.users.find( { $or:[ { name:{$regex:”q”}}, {email:{$exists:true} }]} );
db.scores.find( { $or: [ {score:{$lt:50}},{score:{$gt:90}} ] } );

querying inside arrays y queries with dot notation
db.catalog.find( { price : { $gt : 10000 } , “reviews.rating” : { $gte : 5 } } );

cursors
cur = db.people.find(); null;
cur.limit(5); null; (esto opcional. limita a 5)
cur.sort( {name:-1} ); null; (esto es opcional ordena por nombre ascendente)
cur.hasNext();
cur.next();

while(cur.hasNext()) printjson(cur.next());

Consulta que recupera los documentos de exámenes, ordenados por puntuación en orden descendente, pasando por alto los primeros 50 y que muestra sólo los próximos 20.
db.scores.find({ type : “exam” }).sort( {score:-1} ).skip(50).limit(20);

count
db.scores.count({type:”exam”});

¿Cómo se cuentan los documentos de la colección de partituras en que el tipo era “essay” y el puntaje fue mayor que 90?
db.scores.count({type:”essay”, score:{$gt:90}});

update
Modifica el monbre y el salario de smith, quita el resto de propiedades
db.people.update({name:”smith”},{name:”thomspn”, salary:5000});

$set
db.people.update({name:”smith”},{$set:{salary:5000}});
db.people.update({name:”smith”},{$inc:{salary:1}});
db.users.update({‘username’:’splunker’},{$set:{‘country’:’RU’}});

$unset
db.users.update({‘username’:’splunker’},{$unset:{‘country’:’RU’}});
Consulta de actualización que quitará intereses en el siguiente documento en los usuarios de colección. La clave principal es nombre de usuario.
db.users.update({‘username’:’jimmy’},{$unset:{‘interests’:1}});

$push, $pop, $pull, $pushAll, $pullAll, $addToSet
Supongamos que tenemos el siguiente documento en su colección de amigos:
{ _id : “Mike”, interests : [ “chess”, “botany” ] }
¿Cuál será el resultado de las siguientes actualizaciones?
db.friends.update( { _id : “Mike” }, { $push : { interests : “skydiving” } } );
db.friends.update( { _id : “Mike” }, { $pop : { interests : -1 } } );
db.friends.update( { _id : “Mike” }, { $addToSet : { interests : “skydiving” } } );
db.friends.update( { _id : “Mike” }, { $pushAll: { interests : [ “skydiving” , “skiing” ] } } );
Resultado:
{ _id : “Mike” , “interests” : [ “botany”, “skydiving”, “skydiving”, “skiing” ] }

multi-update
db.people.update({name:”smith”},{$set:{salary:5000},{multi:true}});

¿Cómo dar a cada registro cuyo puntaje fue inferior al 70 un extra de 20 puntos?
db.scores.update({score:{$lt:70}},{$inc:{score:20}},{multi:true});

Removing data
db.scores.remove({score:{$lt:60}});
db.people.remove();
db.people.drop();

getLastError
db.runCommand( {getLastError:1} );

9-marzo-2013
admin

MongoDB, Spark y FreeMarker

Ejemplo de uso de MongoDB, Spark y FreeMarker. Además, se utilizará Maven para incluir las dependencias necesarias para ello.

En primer lugar se necesita el driver de Java, ya que es la tecnología sobre la que está implementado el framework Spark y será el encargado de interactuar o explotar la base de datos.

              
	org.mongodb	
	mongo-java-driver
	2.10.1      
    

Un ejemplo de uso de este driver puede ser:

        MongoClient client = new MongoClient( new ServerAddress("localhost", 27017));
        DB data = client.getDB("course");
        DBCollection col = data.getCollection("hello");
        DBObject doc = col.findOne();

Spark Web Application Framework

     
            spark
            spark
            0.9.9.4-SNAPSHOT
     
      
	import static spark.Spark.*;
	import spark.*;

	public class HelloWorld {

	   public static void main(String[] args) {
	      	get(new Route("/hello") {
        		 @Override
		         public Object handle(Request request, Response response) {
        		    return "Hello World!";
	        	 }
      		});
	   }
	}

Para probarlo si estás usando IntelliJ IDEA basta lanzar con run y luego en el navegador http://localhost:4567/hello.


Uso de plantillas con Freemarker

   
      org.freemarker
      freemarker
      [2.3.19,2.4)
   

Ejemplo de plantilla. Se puede observar que hay una variable ${name}. Ésta variable se rellenará mediante el framework de Spark.

< html >
< head >
  < title >Welcome!

< body >
  < h1 >Hello ${name}


        final Configuration configuration = new Configuration();
	configuration.setClassForTemplateLoading(HelloWorldSparkFreemarkerStyle.class, "/");
	Spark.get(new Route("/") {
            
		@Override
		public Object handle(final Request request, final Response response) {
			StringWriter writer = new StringWriter();
			try {
				Template helloTemplate = configuration.getTemplate("hello.ftl");
				Map helloMap = new HashMap();
				helloMap.put("name", "Freemarker");
				helloTemplate.process(helloMap, writer);
                
			} catch (Exception e) {
				halt(500);
				e.printStackTrace();
			}
			return writer;
		}
        });

Podría utilizarse el acceso a la BD mediante el driver de java para obtener cualquier información y posteriormente poder mostrarla en una jsp mediante un plantilla freemaker.


9-marzo-2013
admin

MongoDB Iniciación

¿Qué es MongoDB?
MongoDB forma parte de la nueva familia de sistemas de base de datos NoSQL. En vez de guardar los datos en tablas como se hace en las base de datos relacionales, MongoDB guarda estructuras de datos en documentos tipo JSON con un esquema dinámico (MongoDB llama ese formato BSON).

Instalar MongoDB

Instalación en windows.
1 – Descomprimir la última version de MongoDB que se puede descargar de aquí.
2 – Crear un directorio c:/data/db
3 – El servidor de MongoDB se arranca la db ejecutando “mongod” en la consola de windows. (Es recomendable meter el directorio de instalación en el PATH de las variables de entorno).
4 – Se puede comprobar que todo funciona correctamente ejecutando en otra consola de windows: “mongo localhost/test” ó “mongo”.

Ejemplo de comandos a utilizar por la consola:

mongo shell
	use test //Cambiar de db, se pasaria a la db test
	db.things.save({a:1, b:2, c:3}) //Crea una entrada en la tabla things
	db.things.find() //Devuelve todos los elementos de things
	db.things.find( {a:1} )
	db.things.find().pretty()
	db //Dice la db a la que estas conectado
	show dbs
	show collections

Categorias

Linkedin