MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongo Group и сума с две полета

Тъй като трябва да изчислите броя на имейлите, разменени между 2 адреса, би било справедливо да се проектира унифициран between поле, както следва:

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

Логиката на обединяване трябва да е съвсем ясна от примера:това е сортиран по азбучен ред масив от двата имейла. $match и $toLower частите не са задължителни, ако имате доверие на вашите данни.

Документация за операторите, използвани в примера:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да изпълня еквивалента на SQL Join в MongoDB?

  2. Най-добрата практика на MongoDB за преброяване на свързани документи

  3. Mongorestore в Docker файл

  4. Направете нещо, ако нищо не е намерено с .find() mongoose

  5. Mongoid::Versioning - как да проверя предишни версии?