Comparar números en cadenas con unidades en MongoDB/Mongoose

Guía para normalizar nutrientes en MongoDB y Node.js: migrar a valores numéricos con unidad separada, crear índices para consultas por rango y estrategias si no es posible migrar (agregación, campos calculados y vistas).

28 sept 2025 • 4 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

En muchas APIs de recetas con Node.js, Express y Mongoose los valores de nutrientes se guardan como cadenas con unidades, por ejemplo calorías almacenadas como 389 kcal o proteinContent como 5 g y sirve como 8 servings. Ese formato impide usar directamente operadores numéricos de MongoDB como $gt $lt $gte $lte porque el campo es una cadena y no un número.

Recomendación principal: migrar a valores numéricos y unidad por separado. Lo ideal es modelar nutrients como un objeto con valor numérico y unidad, por ejemplo nutrients.calories.value tipo Number y nutrients.calories.unit tipo String, y lo mismo para proteinContent, fatContent y serves. Ventajas: consultas por rangos eficientes, posibilidad de indexar fields numéricos para $lt $gt y menor complejidad en validaciones y conversiones. Para servir consultas rápidas y escalables cree índices compuestos o parciales sobre nutrients.calories.value u otros campos que use en filtros.

Si puede migrar, pasos prácticos recomendados: 1) añadir campos nuevos con nombres como calories_value y calories_unit o la estructura anidada value y unit; 2) ejecutar un script de migración que recorra la colección, extraiga el número con una expresión regular y convierta a Number, guardando la unidad normalizada; 3) verificar y crear índices; 4) adaptar el esquema de Mongoose y usar middleware pre save para mantener sincronizados los campos al crear o actualizar recetas; 5) una vez verificado, eliminar o dejar obsoletos los campos originales para limpieza.

Si no es posible migrar inmediatamente, opciones para filtrar sin cambiar todos los documentos:

1 Uso de aggregation pipeline en MongoDB: puede en tiempo de consulta usar etapas como $addFields para extraer la parte numérica y convertirla a double con $toDouble o $convert y luego hacer $match sobre ese valor convertido. Ejemplo conceptual: primero agregar un campo temporal calories_num derivado de una extracción regex de la cadena, convertirlo a número y después filtrar calories_num por el rango deseado. Esta solución funciona pero tiene impacto en rendimiento porque no aprovecha índices y suele provocar escaneos de colección en consultas frecuentes.

2 Filtrado en Node.js tras la consulta: recupere documentos y en la capa aplicación parsee las cadenas con una función que elimine caracteres no numéricos y use parseFloat o Number para comparar. Esta estrategia es sencilla pero consume ancho de banda y CPU, y no escala bien cuando la colección es grande.

3 Campos calculados o materializados: si no puede migrar los datos originales ahora, cree campos auxiliares actualizados periódicamente o al escribir que contengan el valor numérico. Por ejemplo un job nocturno que normalice y escriba nutrients.calories_value. Así obtiene consultas rápidas y evita bloquear la aplicación en tiempo real.

4 Crear vistas o colecciones derivadas: puede usar una colección secundaria poblada por agregaciones que almacene sólo los valores numéricos normalizados y las unidades, y consultar esa colección para búsquedas por rangos.

Consideraciones técnicas y rendimiento: usar aggregation con $regexFind y $toDouble está bien para queries ad hoc y limpiezas puntuales, pero para búsquedas frecuentes en producción lo preferible es tener el dato en formato Number e índices sobre él. También normalice unidades para evitar que una misma magnitud aparezca como kcal, calories, kCal, etc. y así poder comparar correctamente.

Buenas prácticas en Mongoose: añadir validadores en el esquema, usar middleware pre save para parsear y guardar tanto la cadena original como los campos numéricos y la unidad, exponer virtuals para compatibilidad hacia atrás y ofrecer consultas helper methods que acepten rangos con unidades y realicen la conversión adecuada.

Qué hacer con serves y otras medidas no estandarizadas: trate serves como un objeto con value Number y unit String o como integer si la unidad es siempre porciones. Si hay variantes como porciones unitarias y porciones por persona, normalice a una unidad base o guarde ambas formas.

Resumen de recomendaciones rápidas: 1 migrar y normalizar almacenando value y unit por separado; 2 indexar los fields numéricos para consultas por rango; 3 si no puede migrar, usar agregaciones para extraer y convertir en consulta o mantener campos materializados; 4 implementar middleware en Mongoose para mantener consistencia; 5 normalizar unidades y documentar el esquema.

En Q2BSTUDIO somos especialistas en desarrollo de software a medida y aplicaciones a medida y podemos ayudar a diseñar la estrategia de migración, normalización y arquitectura de datos para que sus consultas sean seguras y escalables. Ofrecemos servicios que combinan inteligencia artificial, ciberseguridad y arquitectura cloud para soluciones completas. Si necesita migrar o reestructurar su modelo de datos o implementar pipelines eficientes en MongoDB y Node.js podemos acompañarle con experiencia en servicios cloud aws y azure y en despliegue seguro.

Si le interesa una solución de desarrollo a medida visite nuestra página sobre desarrollo de aplicaciones y software a medida servicios de desarrollo de aplicaciones y para proyectos que incorporen modelos y agentes IA consulte nuestros servicios de inteligencia artificial IA para empresas y agentes IA. También ofrecemos servicios de servicios inteligencia de negocio y power bi y consultoría en ciberseguridad para proteger sus datos y procesos.

Palabras clave integradas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.