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

Follow up Java.

Java: So far, so good!A poco más de 20 días de una nueva aventura profesional, la perspectiva de aprovechamiento, tiempos de aprendizaje y transferencia del conocimiento ha sido interesante, en realidad muy positiva.

Después de casi 3 semanas de haber comenzado, el aprendizaje de los conceptos base (knowledge base, término ampliamente utilizado en el área), la familiarización con la estructura del código, la codificación en sí, comienzan a dar frutos y a tomar forma.
¿Qué hemos aprendido hasta el momento?
Estructura del lenguajeTipos de variables, variables de miembros y cómo declararlasUso de operadores y concepto de operandosEstructura básica de las clases, objetos, interfaces, packagesHerencia de objetos, instancias, atributos estáticos, parámetros, variables, métodosEntre otros temas, esos son los avances.
En retrospectiva, el bagaje de conocimiento previo (en lo personal) ha sido de gran impacto en términos positivos y la curva de aprendizaje muy tenue. A decir verdad, y con base en …

Ejercicios para mantener la habilidad matemática y de programación

En unos de mis cursos recientemente tomados encontré un sitio que me pareció interesante, y es https://projecteuler.net/

Esta lleno de problemas comunes que podemos practicar y mantener nuestras habilidades matemáticas y de programación.

¡Ejercicios que podemos resolver en nuestros tiempos libres!

How a feature collection of points should looks like

¿How a feature collection of points should looks like?

Do not forget, this is a JSON notation.

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [-105.02, 39.61]
        },
        "properties": {
            "prop0": "value0"
        }
    }]
};

For example the small code above can be added to a Leaflet library to see how this run. intelimapa.com is using this approach for feeding its clients maps.