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.