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

261
Vistas
¿Se pueden usar juntos $regex y $gte/$lte para cadenas en mongodb?

Tengo la fecha de transacción en la base de datos mongodb en el formato "7/1/2021 12:30:48 PM" (cadena en M/D/YYYY). Desde el lado de React, estoy ingresando dos fechas: desde la fecha y hasta la fecha, que son cadenas en el formato AAAA-MM-DD. Estoy usando el siguiente código para encontrar transacciones que vienen entre las fechas Desde y Hasta. Recibo un error de conversión, pero todas las fechas están en formato de cadena. Funciona perfectamente con una sola fecha sin $gte y $lte.

Mensaje de ERROR: CastError: la conversión a cadena falló para el valor "{ '$regex': '7/1/2021', '$options': '$i' }" (tipo Objeto) en la ruta "Trandate" para el modelo "transacción "

 const chooseWinner = await Transaction.find( { ContCode: CountryCode, CurrCode: CurrCode, CorrOrgCode: CorrorgCode, ServCode: ServCode, BranchCode: BranchCode, Trandate: {$gte: {$regex : SDate, $options: "$i"}}, Trandate: {$lte: {$regex : EDate, $options: "$i"}}, }, "CustomerCode ReferenceNo Trandate " );

También he cambiado las fechas desde y hasta al siguiente formato:

 var SDate = new Date(FromDate).toLocaleDateString("hi-IN",{month:'numeric'})+"/"+ new Date(FromDate).toLocaleDateString("hi-IN",{day:'numeric'})+"/"+ new Date(FromDate).toLocaleDateString("hi-IN",{year:'numeric'}); console.log("frmdate: ",SDate); var EDate = new Date(ToDate).toLocaleDateString("hi-IN",{month:'numeric'})+"/"+ new Date(ToDate).toLocaleDateString("hi-IN",{day:'numeric'})+"/"+ new Date(ToDate).toLocaleDateString("hi-IN",{year:'numeric'}); console.log("enddate: ",EDate);
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No sé acerca de la expresión regular y $ gte / $ lte juntos, pero parece que el problema es con el formato de fecha. ¿Por qué no usar usar calumniado?

{Trandate:{$gte:ISODate(FromDate),$lt:ISODate(ToDate)}}

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para responder a la pregunta formulada directamente, no, el operador de consulta $regex no se puede anidar dentro de un operador de desigualdad como ese.

El operador $regex devuelve verdadero o falso para indicar si la cadena coincide o no, por lo que incluso si estuviera permitido, esa comparación anidada sería efectivamente "menor o igual que (booleano)". Dado que los operadores de consulta de mongodb son sensibles al tipo, esa comparación siempre será falsa.

Para responder a la pregunta implícita ¿ Cómo puedo consultar estas fechas por un rango específico? :

Las fechas almacenadas en el formato de cadena que muestra no se pueden comparar significativamente con las operaciones de desigualdad.

Por ejemplo, aquí hay algunas fechas ordenadas:

 "6/1/2022 1:30 PM", "7/1/2021 12:30:48 PM", "7/1/2021 9:30:48 AM", "7/12/2021 12:30:48 PM", "7/2/2021 12:30:48 PM", "8/1/2001 8:55:00 AM"

Si consultara {$lte: "8/1/2001 8:55:00 AM"} , las 6 fechas coincidirían.

Para consultar un rango de fechas, deberá:

  • Consulta con agregación
    use una canalización que lea todos los documentos de la colección, use el operador de agregación $dateFromString para convertir las cadenas en fechas y luego haga coincidir el campo convertido. Esto no es escalable y no funcionará bien bajo ninguna carga no trivial.
  • Modificar el esquema
    Cambie la aplicación para convertir las fechas de cadena en un objeto Fecha antes de almacenarlas en la base de datos. Todos los documentos existentes también deberán modificarse. Esto le permitirá realizar consultas en el campo con $gte y $lte directamente, y permitirá que se utilice un índice para mejorar el rendimiento.
about 4 years ago · Juan Pablo Isaza Denunciar
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