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} );

Comentarios cerrados.

Categorias

Linkedin