MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo Group i suma z dwoma polami

Ponieważ musisz obliczyć liczbę e-maili wymienianych pomiędzy 2 adresy, byłoby sprawiedliwie zaprojektować zunifikowane between pole w następujący sposób:

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 unifikacji powinna być całkiem jasna na przykładzie:jest to posortowana alfabetycznie tablica obu e-maili. $match i $toLower części są opcjonalne, jeśli ufasz swoim danym.

Dokumentacja dla operatorów wykorzystana w przykładzie:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $dayOfMonth

  2. MongoDB :Aktualizuj semantykę modyfikatora $unset

  3. Zmiana nazwy pola w osadzonym dokumencie w tablicy w MongoDB nie działa

  4. Zapytanie o dokumenty, które posiadają wewnętrzne podpole o danej wartości

  5. Odniesienia do dokumentów Mongoose z relacją jeden-do-wielu