2015-04-10 2 views
1

Я использую mongo в первый раз. Я пытаюсь агрегировать некоторые документы в коллекции, используя запрос ниже. Вместо этого запрос возвращает объект с ключевым «результатом», который содержит массив всех документов, которые соответствуют значению $.Запрос на агрегирование возвращающего массива всех объектов для mongodb

Ниже приведен запрос.

db.events_2015_04_10.aggregate([ 
       {$group:{ 
        _id: "$uid", 
        count: {$sum: 1}, 
        }, 
        $match : {promo:"bc40100abc8d4eb6a0c68f81f4a756c7", evt:"login"} 
       } 
      ] 
     ); 

Ниже приведен образец документа в коллекции:

{ 
    "_id" : ObjectId("552712c3f92ea17426000ace"), 
    "product" : "Mobile Safari", 
    "venue_id" : NumberLong(71540), 
    "uid" : "dd542fea6b4443469ff7bf1f56472eac", 
    "ag" : 0, 
    "promo" : "bc40100abc8d4eb6a0c68f81f4a756c7", 
    "promo_f" : NumberLong(1), 
    "brand" : NumberLong(17), 
    "venue" : "ovation_2480", 
    "lt" : 0, 
    "ts" : ISODate("2015-04-10T00:01:07.734Z"), 
    "evt" : "login", 
    "mac" : "00:00:00:00:00:00", 
    "__ns__" : "wifipromo", 
    "pvdr" : NumberLong(42), 
    "os" : "iPhone", 
    "cmpgn" : "fc6de34aef8b4f57af0b8fda98d8c530", 
    "ip" : "192.119.43.250", 
    "lng" : 0, 
    "product_ver" : "8" 
} 

Я пытаюсь получить все это сгруппированы по Uid годов с общей суммы каждой группы ... Что такое правильный способ добиться этого?

ответ

1

Попробуйте следующую структуру агрегации, которая имеет стадию $match трубопровода первым, а затем трубопровод $group позже:

db.events_2015_04_10.aggregate([ 
    { 
     $match: { 
      promo: "bc40100abc8d4eb6a0c68f81f4a756c7", 
      evt: "login" 
     } 
    }, 
    { 
     $group: { 
      _id: "$uid", 
      count: { 
       $sum: 1 
      } 
     }   
    } 
]) 
Смежные вопросы