Запрос MongoDB с условной группировкой по выражению

Мне нужно экспортировать записи клиентов из базы данных mongoDB. Экспортированные записи клиентов не должны иметь дублированных значений. «firstName + lastName + code» - это ключ к DE-дублированной записи, и если в базе данных присутствуют две записи с одинаковым ключом, то мне нужно отдать предпочтение исходному полю со значением, отличным от адреса электронной почты.

покупатель (id,firstName,lastName,code,source) Коллекция это.

Если есть запись 3 записи с тем же уникальным ключом и 3 разных источника, то мне нужно выбрать только одну запись между 2 источниками (ТВ, Интернет) {или если есть n источников, мне нужна только одна запись} не с ' запрос электронной почты '(так как адрес электронной почты будет выбран, когда присутствует только одна запись с уникальным ключом, а источником является адрес электронной почты) с использованием:

`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}
        }
    } ])`

образец вывода:{ "_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" ] }

Это проблема с этим запросом, пожалуйста, предложите :(

Ответы на вопрос(1)

Ваш ответ на вопрос