Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

249
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!