Ir al contenido principal

MongoDB, ¿cómo acceder a un campo array y filtrar cuando no sea vacío?

En mongo podemos hacer consultas extremadamente sencillas pero sobre todo ágiles.

Por ejemplo, pensemos que dentro de nuestra colección miembros necesitamos traer todos los documentos que contengan dentro del campo email (un array) por lo menos un correo electrónico. Tendríamos que correr el siguiente query:
> db.miembros.find({"email": {$exists: true, $not: {$size: 0}}}, {})
Ahora bien, pensémos que por alguna razón desconocida, los datos en los documentos tienen alguna inconsistencia  como por ejemplo a alguien se le ocurrió guardarlos en la siguiente notación:
email: ["","email@domain.com", "", ""]
¿Qué desastre verdad?, aún así, en el momento en que estas intentando sacar un conjunto de datos, lo que requieres es acceder al menos a las colecciones que por lo menos tiene 1 correo electrónico dentro. Entonces tendríamos que añadir lo siguiente al query anterior:
> db.miembros.find({"email": {$exists: true, $not: {$size: 0}, $ne: ""}}, {})
Si estamos trabajando con millones de datos, quizá te convenga añadir al final del la sentencia un .limit(N), donde N es un número entero positivo, 10 es un buen número.

Comentarios

Entradas populares de este blog

Cómo dar acceso a una ip externa a postgresql y concediendo permiso desde iptables

Recientemente tuve la necesidad de aplicar un par de ajustes en nuestro SGDB  (postgresql) en uno de nuestros entornos de desarrollo. Escenario encontrado: No tenía acceso al usuario administrador de PG postgres Contaba con un usuario de sistema ( Linux ) sudoer PG no estaba preparado para permitir conexiones desde fuera El sistema operativo tenia activo iptables y el puerto 5432 no estaba habilitado para escuchar en el exterior en una ip específica. Me tocó leer un poco sobre cómo configurar PostgreSQL para permitir conexiones desde fuera y cómo configurar una regla en iptables que permitiera acceso al proveedor desde el exterior al puerto que necesitaba estuviera escuchando la ip del proveedor. Resumiré en las siguientes líneas las configuraciones más importantes para: Proveer acceso desde PG a un usuario externo. Permitir comunicación entre la ip del usuario externo y nuestro puerto en el servidor donde está nuestro PG . ...

Cómo extraer una columna específica de un archivo CSV

Recientemente me encontré con un pequeño reto, simple pero súper útil cuando no quieres complicarte la vida. Necesitaba de una serie de archivos en formato CSV, separados por comas, extraer únicamente las primeras 3 columnas de 4, ¡sí!, pocas columnas, pero con cientos de filas que no estaba dispuesto a editar a mano, y descubrí el comando cut, lo utilicé de la siguiente manera: [jonas]$ cut -d "," -f1-3 origen.csv > destino.csv Donde -d hace referencia al delimitado en el el archivo, -f1-3 hace referencia a las columnas que vamos a extraer, de la número 1 a la 3, origen.csv hace referencia al archivo de original sobre el cuál vamos a tomar las columnas que necesitamos y finalmente destino.csv que es el archivo destino que almacenará el nuevo resultado, y listo!, podrías complicarte la vida con awk , pero si no eres tan experto, es algo que no vas a utilizar diario y no necesitas invertir tanto tiempo, pues, algo simple como cut te va bien.

Finalmente me encontré con ella y desde el día #1, hemos disfrutado juntos...

Hace más de 4 años que nos mirábamos, pero nos ignorábamos, fue quizá por que no era el momento, yo tenía una relación más dinámica, más demandante, más intensa, sin embargo en ese lapso de 4 años si tuve 3 encuentros con la que hoy ahora comienzo a sentirme entregado: Yoga He hecho Crossfit por mucho tiempo, lo he amado, y me he entregado al 100%, ese ha sido mi receso del día en una vida adulta. En el lapso de los últimos 4 años, un amigo -colombiano por cierto- me invitó a su casa a hacer yoga, él en ese tiempo era maestro de yoga en un pequeño pueblo pegado al mar en las costas de Quintana Roo. Tomé 3 clases con él, y desde la primera, quedé enamorado, sabía que quería intentarlo pero estaba concentrado en un ejercicio de más alto impacto, supongo que la edad también juega un factor importante, al menos eso pienso. Hoy con el contexto que hemos estado viviendo, el encierro y aislamiento principalmente, nuestro reto más importante, toca reconfigurarse a si mismo, probar nuevos c...