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

190
Views
Matriz de buscadores para cuando falla el anterior

Tengo la siguiente estructura para los documentos:

 { companyId: string, language: string, country: string, template: string }

Necesito hacer una sola llamada a la base de datos para obtener un documento, pero tengo tres formas de encontrarlo:

 1 - {companyId: companyId, language: language} 2 - {companyId: companyId, language: languageCompany} 3 - {companyId: 'default', companyId: 'default', country: country}

Y quiero que cada forma se aplique cuando la anterior ha fallado.

Por ejemplo:
Ejemplo de base de datos:

 [{ companyId: 'companyId1', language: 'en', country: 'GB', template: '....' }, { companyId: 'companyId2', language: 'es', country: 'ES', template: '....' }, { companyId: 'default', language: 'default', country: 'ES', template: '....' }]

Ejemplos de entradas y salidas:

 Input 1 { companyId: 'companyId1', language: 'en', languageCompany: 'en', country: 'ES', } Output (apply first criteria): { companyId: 'companyId1', language: 'en', country: 'GB', template: '....' }
 Input 2 { companyId: 'companyId2', language: 'en', languageCompany: 'es', country: 'ES', } Output (apply second criteria): { companyId: 'companyId1', language: 'en', country: 'GB', template: '....' }
 Input 3 { companyId: 'companyId2', language: 'en', languageCompany: 'es', country: 'ES', } Output (apply third criteria): { companyId: 'companyId3', language: 'en', country: 'ES', template: '....' }

Solo quiero hacer una llamada No vale hacer la primera llamada y si la segunda no devuelve nada, si la tercera no devuelve nada.

Os dejo este arenero por si os va bien: https://mongoplayground.net/p/CksyJE2nJsi

Muchas gracias por la ayuda :D

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede usar la faceta para ejecutar múltiples consultas

 db.collection.aggregate([ { $facet: { query1: [ { $match: { companyId: "companyId1", language: "en" } }, { $project: { _id: 0 } } ], query2: [ { $match: { companyId: "companyId2", language: "es" } }, { $project: { _id: 0 } } ], query3: [ { $match: { companyId: "default", country: "ES" } }, { $project: { _id: 0 } } ], } } ])

Esto devolverá una matriz con todas las consultas. Tienes que quedarte con el primero que no esté vacío.

 [ { "query1": [ { "companyId": "companyId1", "country": "GB", "language": "en", "template": "...." } ], "query2": [ { "companyId": "companyId2", "country": "ES", "language": "es", "template": "...." } ], "query3": [ { "companyId": "default", "country": "ES", "language": "default", "template": "...." } ] } ]

https://mongoplayground.net/p/k3IAfiLi2Lf

En caso de que su base de datos tuviera estos datos:

 [ { companyId: "othercompanyId1", language: "en", country: "GB", template: "...." }, { companyId: "othercCompanyId2", language: "es", country: "ES", template: "...." }, { companyId: "default", language: "default", country: "ES", template: "...." } ]

Esto devolvería información en la tercera consulta:

 [ { "query1": [], "query2": [], "query3": [ { "companyId": "default", "country": "ES", "language": "default", "template": "...." } ] } ]
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!