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

137
Visualizações
Mongodb match a field only if specific value exists

I am making a dating app, where use have gender filter options (male, female, any). When user selects any I dont want to filter any gender field. I only want to filter/match gender field when user selects male or female options.

const matching_users = await User
  .aggregate([{
    $match: {
      $and: [{
          uid: {
            $in: matches
          }
        },
        {
          account_setuped: true
        },
        {
          $or: [{
            gender: settings.gender_filter === "any" ? "male" : settings.gender_filter
          }, {
            gender: settings.gender_filter === "any" ? "female" : settings.gender_filter
          }]
        }
      ]
    }
  }, ])

is there any better options other than this?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

For the gender comparison part, I think can be simplified as:

.aggregate([{
  $match: {
    $and: [
      { 
        // Filter 1  
      },
      { 
        // Filter 2 
      },
      {
          $expr: {
            $or: [
              {
                $eq: [
                  "any",
                  settings.gender_filter
                ]
              },
              {
                $eq: [
                  "$gender",
                  settings.gender_filter
                ]
              }
            ]
          }
        }
      }
    ]
  }
}]

Sample Mongo Playground


Another approach with switch

{
  "$switch": {
    "branches": [
      {
        "case": {
          $eq: [
            "any",
            settings.gender_filter                  
          ]
        },
        "then": true
      },
    ],
    default: {
      $eq: [
        "$gender",
        settings.gender_filter           
      ]
    }
  }
}

Sample Mongo Playground ($switch)

Note: To test the demo, replace the value which contains the comment:

// settings.gender_filter

about 4 years ago · Juan Pablo Isaza 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