sql >> Databáze >  >> NoSQL >> MongoDB

Mongo Skupina a součet se dvěma poli

Protože musíte vypočítat počet e-mailů vyměněných mezi 2 adresy, bylo by fér navrhnout jednotný between pole takto:

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

Logika sjednocení by měla být z příkladu zcela jasná:jedná se o abecedně seřazené pole obou e-mailů. $match a $toLower části jsou volitelné, pokud důvěřujete svým datům.

Dokumentace pro operátory použitá v příkladu:



  1. vlastní ověření mongoose pomocí 2 polí

  2. Jak najdu podobné dokumenty v MongoDB?

  3. Problémy s nastavením repliky MongoDB SSL – nepodporovaný certifikát

  4. Paměť vedlejšího kanálu Redis Pub