Otra de las operaciones muy usadas (obligatoriamente) en una base de datos es la lectura, esta vez hablaré sobre como consultar datos en MongoDB, continuando mi serie de post sobre CRUD (Create, Read, Update and Delete) en MongoDB.
Esta parte la dividiré en varios post, para así profundizar un poco mas en la lectura de información en MongoDB.
Read / Leer
Leer en una base de datos es una de las operaciones mas ejecutadas sea en relacional o en no relacional (NoSQL), por eso es indispensable, debe ser sencillo consultar datos y debe tener muchas opciones disponible para hacer búsquedas avanzadas. En el caso de MongoDB existen dos métodos, “.find” y “.findOne”, ambas pueden recibir los mismos parámetros, pero la diferencia radica en que “.find” devuelve todos los documentos encontrados y “.findOne” solo uno.
.find()
Este comando se escribe de la siguiente forma:
db.colección.find( pregunta , parámetros )
Donde:
- pregunta es lo que deseas buscar, seria como el WHERE en SQL.
- parámetros son argumento adicionales muy útiles que veremos mas adelante.
Ejemplo:
Creamos 2 documentos
1 2 3 4 5 6 7 8 9 10 11 | > db.prueba.insert( ... {_id: "yograterol.me", ... owner: "Yohan Graterol" ... } ... ) > > db.prueba.insert( ... {_id: "@yograterol", ... owner: "Yohan Graterol" ... } ... ) |
Ahora ejecutamos db.prueba.find()
1 2 3 | > db.prueba.find() {"_id" : "yograterol.me", "owner" : "Yohan Graterol"} {"_id" : "@yograterol", "owner" : "Yohan Graterol"} |
Operador de Igualdad
En SQL, específicamente en la clausula WHERE se encuentra el operador “igual que” (=), donde decimos el campo y el valor de la igualdad, y nos mostrara solo los registro que cumplan la igualdad de la clausula, en MongoDB no existe la clausula WHERE como tal, pero podemos definir búsquedas o lecturas por igualdad de la siguiente forma:
db.coleccion.find( { campo: igualdad } )
Ejemplo:
1 2 3 4 | > db.prueba.find({ _id: "yograterol.me"}) {"_id" : "yograterol.me", "owner" : "Yohan Graterol"} > db.prueba.find({ _id: "@yograterol"}) {"_id" : "@yograterol", "owner" : "Yohan Graterol"} |
Vemos que regresa solo el documento que cumple con la igualdad.
Y si deseo conseguir en una misma consulta varios documentos con distintos _id?
Tenemos el operador $in, que me permite realizar una consulta y afectar los documentos que cumplan con los valores que estan dentro de un vector, la sintaxis es db.colección.find( { campo: { $in: [lista de valores] } } ), veamos un ejemplo.
1 2 3 | > db.prueba.find({ _id: {$in: ["@yograterol", "yograterol.me"]}}) {"_id" : "@yograterol", "owner" : "Yohan Graterol"} {"_id" : "yograterol.me", "owner" : "Yohan Graterol"} |
En esta consulta busco todos los documentos con _id @yograterol y todos los documentos con _id yograterol.me, ahora imaginen, pueden tener una lista de _id a buscar, arman un vector o lista con todos esos _id, ejecutan una consulta como esta y obtendrán los documentos que desean en UNA SOLA CONSULTA.
Finalizando
Ya con estos métodos se pueden hacer búsquedas básicas y sencillas, MongoDB tiene muchas opciones para las búsquedas, el próximo post sobre CRUD en MongoDB traerá mas opciones del método de búsqueda .find().