Consulta MongoDB con grupo condicional por sentencia

Necesito exportar registros de clientes de la base de datos de mongoDB. Los registros de clientes exportados no deben tener valores duplicados. "firstName + lastName + code" es la clave para eliminar el registro y si hay dos registros presentes en la base de datos con la misma clave, entonces necesito dar preferencia al campo de origen con un valor diferente al correo electrónico.

cliente (id,firstName,lastName,code,source) colección es esto.

Si hay registros de 3 registros con la misma clave única y 3 fuentes diferentes, entonces necesito elegir solo un registro entre 2 fuentes (TV, Internet) {o si hay un número n de fuentes, solo necesito un registro} no con el ' correo electrónico '(ya que el correo electrónico se elegirá cuando solo haya un registro con la clave única y el origen sea el correo electrónico) mediante:

`db.customer.aggregate([
 { "$match" : { "active" : true , "dealerCode" : { "$in" : [ "111391"]} , "source" : { "$in" : [ "email","TV","internet"]}}},
   {$group:{"_id":{
                  "firstName":"$personalInfo.firstName",
                  "lastName":"$personalInfo.lastName",
                  "code":"$vehicle.code"},              
        "source":{
                   $addToSet:{"source":"$source"}
                 }
        }
    },
    {$redact: 
        {$cond:[{$eq:[{$ifNull:["$source","other"]},"email"]},"$PRUNE","$DESCEND"]}
    },
   {$project:
        {"source":
            {$map:
                  {"input":
                       {$cond:[
                         {$eq:[{$size:"$source"},0]},[{"source":"email"}],"$source"]
                        },"as":"inp","in":"$inp.source"}
            },
            "record":{"_id":1}
        }
    } ])`

salida de muestra:{ "_id" : { "firstName" : "sGI6YaJ36WRfI4xuJQzI7A==", "lastName" : "99eQ7i+uTOqO8X+IPW+NOA==", "code" : "1GTHK23688F113955" }, "source" : [ "internet" ] } { "_id" : { "firstName" : "WYDROTF/9vs9O7XhdIKd5Q==", "lastName" : "BM18Uq/ltcbdx0UJOXh7Sw==", "code" : "1G4GE5GV5AF180133" }, "source" : [ "internet" ] } { "_id" : { "firstName" : "id+U2gYNHQaNQRWXpe34MA==", "lastName" : "AIs1G33QnH9RB0nupJEvjw==", "code" : "1G4GE5EV0AF177966" }, "source" : [ "internet" ] } { "_id" : { "firstName" : "qhreJVuUA5l8lnBPVhMAdw==", "lastName" : "petb0Qx3YPfebSioY0wL9w==", "code" : "1G1AL55F277253143" }, "source" : [ "TV" ] } { "_id" : { "firstName" : "qhreJVuUA5l8lnBPVhMAdw==", "lastName" : "6LB/NmhbfqTagbOnHFGoog==", "code" : "1GCVKREC0EZ168134" }, "source" : [ "TV", "internet" ] }

Este es un problema con esta consulta, sugiera :(

Respuestas a la pregunta(1)

Su respuesta a la pregunta