Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

183
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda