1
resposta

[Dúvida] Filtro personalizado

Olá time, durante as aulas tive interesse em fazer um filtro dentro do array de dependentes. Por exemplo: quero retornar todos os dependentes do genero "Feminino", fiz algumas tentativas mas ainda não cheguei ao resultado esperado. Segue tentativa:

db.clientes.aggregate([
    {$match:{"dependentes.genero": "Feminino"}},
    {$unwind:"$dependentes"}, 
    { $group: {
        _id: "$genero",
          count: { $sum: 1 }
    }}
])

Podem me sugerir como obter o resultado desejado por favor?

1 resposta

Oi!

Uma solução para o seu problema é utilizar a etapa $filter no estágio $project da agregação. Dessa forma, você pode filtrar os dependentes do gênero "Feminino" antes de realizar o unwind.

Aqui está um exemplo de como você pode fazer isso:

db.clientes.aggregate([
  {
    $project: {
      dependents: {
        $filter: {
          input: "$dependents",
          as: "dependent",
          cond: { $eq: ["$$dependent.gender", "Feminino"] }
        }
      }
    }
  },
  { $unwind: "$dependents" },
  {
    $group: {
      _id: "$genero",
      count: { $sum: 1 }
    }
  }
])