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