MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongo-Gruppe und Summe mit zwei Feldern

Da Sie die Anzahl der ausgetauschten E-Mails zwischen berechnen müssen 2 Adressen, wäre es fair, einen einheitlichen between zu projizieren Feld wie folgt:

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

Die Vereinheitlichungslogik sollte aus dem Beispiel klar hervorgehen:Es handelt sich um ein alphabetisch sortiertes Array beider E-Mails. Das $match und $toLower Teile sind optional, wenn Sie Ihren Daten vertrauen.

Dokumentation für im Beispiel verwendete Operatoren: