MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo Group e somma con due campi

Poiché devi calcolare il numero di email scambiate tra 2 indirizzi, sarebbe corretto proiettare un between unificato campo come segue:

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

La logica di unificazione dovrebbe essere abbastanza chiara dall'esempio:è una matrice ordinata alfabeticamente di entrambe le e-mail. Il $match e $toLower le parti sono facoltative se ritieni attendibili i tuoi dati.

Documentazione per gli operatori utilizzati nell'esempio: