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

663
Vistas
Encuentre documentos con $gte o $lte que tengan números como valores de cadena en matrices

Tengo una colección MongoDB que contiene documentos de la siguiente manera:

 { "_id": ObjectId(.....), "name": "John", "contacts": [ { "name": "henry", "age": "22" }, { "name": "merry", "age": "12" } ] }

Quiero encontrar documentos que tengan contacts.age . La edad es inferior a 20. Intenté la siguiente consulta de mongo pero no tuve suerte. ¿Alguien puede ayudarme?

 document.Users.find({'$expr':{'$lte': [{'$toInt':'$contacts.age'}, '20'] }})

La consulta anterior da el siguiente error:

 Query failed with error code 241 and error message 'Executor error during find command :: caused by :: Unsupported conversion from array to int in $convert with no onError value' on server
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si desea todo el documento (sin cambiar nada), puede probar esta consulta de agregación:

El truco aquí es obtener solo documentos donde haya uno true en la matriz devuelta por la condición "$lte": [{"$toInt": "$$this"},20] .

Eso significa que solo se compararán los documentos que tengan una matriz con un valor (mínimo un subdocumento) coincidente.

EDITAR con el ejemplo de trabajo final, usando dos formas de asegurar los datos:

  • Usando "contacts": { "$ne": null } en la etapa $match justo antes de $expr para evitar el mapa sobre nulo.
  • Usar $convert para poder usar onError y onNull en caso de que algún valor no sea un número y no se pueda convertir.
 db.collection.aggregate([ { "$match": { "contacts": { "$ne": null }, "$expr": { "$in": [ true, { "$map": { "input": "$contacts", "in": { "$lte": [ { "$convert": { "input": "$$this.age", "to": "int", "onError": "", "onNull": "" } }, 30 ] } } } ] } } } ])

Ejemplo aquí

over 4 years ago · Santiago Trujillo 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