Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

105
Vistas
Conversión de cadena a fecha inconsistente en Mongoose

Modelo:

 const fooSchema = new mongoose.Schema({ fooCreationDate: { type: Date }, bar: [{ barCreationDate: { type: Date } }] }); const foo = mongoose.model(`foo`, fooSchema);

Si queremos buscar objetos foo que se crearon entre 2022-01-01 y 2022-01-02, podemos usar la siguiente consulta de mangosta:

 foo.find({ fooCreationDate: { $gte: "2022-01-01T00:00:00.000", $lt: "2022-01-02T00:00:00.000" } });

Tenga en cuenta que estoy usando cadenas en lugar de objetos de fecha. El motivo es que el cliente pasa la consulta a través de una llamada AJAX con dataType: "jsonp" . Cada objeto de fecha que se pasa así al backend se convierte automáticamente en una cadena ISO. A pesar de eso, la consulta funciona sin problemas: la función de búsqueda analiza automáticamente las fechas representadas como cadenas ISO.

Ahora nos gustaría extraer todos los objetos de barra que se crearon en el mismo rango de tiempo, por lo que necesitaremos usar una agregación:

 foo.aggregate([{ $unwind: `$bar`, }, { $match: { "bar.barCreationDate": { $gte: "2022-01-01T00:00:00.000", $lt: "2022-01-02T00:00:00.000" } } }]);

Desafortunadamente, no se encuentra nada a pesar de que la base de datos contiene objetos de barra coincidentes. Esto se puede confirmar pasando objetos de fecha en lugar de cadenas a la agregación de $coincidencia:

 foo.aggregate([{ $unwind: `$bar`, }, { $match: { "bar.barCreationDate": { $gte: new Date("2022-01-01T00:00:00.000"), $lt: new Date("2022-01-02T00:00:00.000") } } }]);

Esta consulta devuelve algunos resultados, por lo que la conclusión es que mongoose acepta cadenas de fecha ISO en la función de búsqueda, pero no puede manejarlas en la función de agregado. ¿Hay alguna solución conocida? Podría, por ejemplo, escanear en profundidad cada objeto de consulta pasado por el cliente y buscar cadenas de fecha ISO, luego convertirlas en objetos de fecha, pero eso es un poco sucio en mi opinión. Estoy usando mongoose v5.6.4 y mongodb v4.2.2.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda