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

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

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 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!