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

184
Vistas
Ordene la fecha DD/MM en un .find() con Mongoose

Estaba tratando de encontrar cómo puedo ordenar la fecha de cumpleaños por día y mes con un .find() realizado por mongoose.
Código real:

 const embed2 = new MessageEmbed() .setColor('#FBC78E') .setTitle(`Liste des anniversaires de ${message.guild.name}`) birthday.find({}).then(data => { embed2 .setDescription(Array.from(data).map(u => `<@${u.user_id}> : ${u.birthday}`)) loading_message.delete(); message.guild.channels.resolve(args[1]).send(embed2) });

El problema es que cuando trato de agregar un .sort('cumpleaños') a mi .find(), solo filtra los días, pero no es lo que estoy buscando, aquí está el resultado de .find() (sin el .sort()):

 [ { _id: new ObjectId("620d763c86159915746f431b"), user_id: '493470054415859713', birthday: '04/11', __v: 0 }, { _id: new ObjectId("620d770505fa9fe0910968c0"), user_id: '933751655046979645', birthday: '18/05', __v: 0 }, { _id: new ObjectId("620d77575417ab94a5f2c837"), user_id: '735987183714041867', birthday: '15/12', __v: 0 }, { _id: new ObjectId("620d85fed17e202ed6d2b847"), user_id: '320851795058360331', birthday: '03/11', __v: 0 } ]

Resultado exceptuado:

 [ { _id: new ObjectId("620d770505fa9fe0910968c0"), user_id: '933751655046979645', birthday: '18/05', __v: 0 }, { _id: new ObjectId("620d85fed17e202ed6d2b847"), user_id: '320851795058360331', birthday: '03/11', __v: 0 }, { _id: new ObjectId("620d763c86159915746f431b"), user_id: '493470054415859713', birthday: '04/11', __v: 0 }, { _id: new ObjectId("620d77575417ab94a5f2c837"), user_id: '735987183714041867', birthday: '15/12', __v: 0 } ]

Como puede ver aquí, los cumpleaños están ordenados por día Y mes, que es lo que intento hacer. Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cuando ordena los valores de campo "04/11", "18/05", "15/12", "03/11" - la ordenación ocurre como "03/11", "04/11", "15/12 ", "18/05". Es por los valores de cadena, donde "0" es menor que "1" y así sucesivamente. Dado que los datos de birthday tienen el formato "DD/MM", no puede obtener la clasificación correcta que busca, es decir, por MM y DD. El formato de datos debe ser "MM/DD". La forma de hacerlo es transformar el formato y luego ordenar con los valores recién formateados.

Por ejemplo, puede usar operadores de agregación para cambiar los valores de DD y MM en el campo de birthday y crear un nuevo campo llamado birthday_MM_DD y usarlo para ordenar. Tenga en cuenta que el código se ejecuta en mongosh o mongo shell.

 var pipeline = [ // Create a new birthday field with MM/DD format (a temporary field) { $addFields: { birthday_MM_DD: { $concat: [ { $substrCP: [ "$birthday", 3, 2 ] }, "/", { $substrCP: [ "$birthday", 0, 2 ] } ] } } }, // Sort with the newly formatted birthday field { $sort: { birthday_MM_DD: 1 } }, // Remove the temporary birthday field // (as it is no longer needed) { $unset: "birthday_MM_DD" }, ] db.collection.aggregate(pipeline)

El resultado tiene los documentos. formateado ordenado correctamente por birthday de nacimiento, como se esperaba: "18/05", "03/11", "04/11", "15/12"

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