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

792
Vistas
Agregación de MongoDB: $ regexMatch en el campo de matriz

Estoy usando el operador $regexMatch de Mongo para buscar documentos en los que al menos parte de un campo coincida con el patrón, y esto funciona bien para los campos de nivel raíz. Pero, ¿cómo lo uso con campos de matriz? Quiero devolver una coincidencia si al menos uno de los elementos de la matriz coincide con el patrón.

Por ejemplo, digamos que la colección tiene estos dos documentos:

 { "_id": ObjectId("5ff6335c1570ba63ca5ac21e"), "requirements": [ { "description": "Bachelor of Science required for this blah blah blah", "code": "ABC" }, { "description": "Also much experience in JavaScript blah", "code": "XYZ" } ] }, { "_id": ObjectId("5ff6335b1570ba63ca5abefb"), "requirements": [ { "description": "Master of Arts WANTED NOW!", "code": "TTT" }, { "description": "5+ experience required in C++", "code": "QQQ" } ] }

y algo como este oleoducto

 db.Collection.aggregate([ { $match: { $expr: { $regexMatch: { input: '$requirements.description', regex: /^.*?\bblah blah blah\b.*?$/im } } } } ])

debe devolver solo el primer documento, ya que su primer elemento dentro de los requirements coincide con la description que contiene "bla, bla, bla" ("Se requiere una licenciatura en ciencias para este bla, bla, bla").

Sin embargo, esto solo me arroja un error que dice '$regexMatch necesita que input sea del tipo cadena'. Y reemplazarlo con $requirements[0].description tampoco funciona.

Entonces, ¿hay alguna manera de hacer coincidir los campos de matriz de expresiones regulares en Mongo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

$regexMatch solo permite requirements de entrada de cadena que tienen una matriz Requiere iterar valores de matriz de bucle,

  • $reduce para iterar el bucle de description , verificar la condición si la expresión coincide y luego devolver el puntaje; de lo contrario, devolver el valor inicial
 db.collection.aggregate([ { $addFields: { score: { $reduce: { input: "$requirements.description", initialValue: 0, in: { $cond: [ { $eq: [ { $regexMatch: { input: "$$this", regex: "blah blah blah" } }, true ] }, 50, "$$value" ] } } } } } ])

Patio de recreo


Si desea filtrar documentos, simplemente intente $regex en la etapa $match ,

 db.collection.aggregate([ { $match: { "requirements.description": { $regex: "blah blah blah" } } } ])

Patio de recreo

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