Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

251
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda