MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongo Group e soma com dois campos


Como você precisa calcular o número de e-mails trocados entre 2 endereços, seria justo projetar um between unificado campo da seguinte forma:
db.a.aggregate([
    { $match: {
        to: { $exists: true },
        from: { $exists: true },
        email: { $exists: true }
    }}, 
    { $project: {
        between: { $cond: { 
            if: { $lte: [ { $strcasecmp: [ "$to", "$from" ] }, 0 ] }, 
            then: [ { $toLower: "$to" }, { $toLower: "$from" } ], 
            else: [ { $toLower: "$from" }, { $toLower: "$to" } ] }
        } 
    }},
    { $group: {
         "_id": "$between",
         "count": { $sum: 1 } 
    }},
    { $sort :{ count: -1 } }
])

A lógica de unificação deve ficar bem clara a partir do exemplo:é uma matriz ordenada alfabeticamente de ambos os e-mails. O $match e $toLower partes são opcionais se você confiar em seus dados.

Documentação para operadores usados ​​no exemplo: