2013-08-26 2 views
0

Я пытаюсь создать отчет от нашего mongo db, который подсчитывает уникальные визиты по коду страны на реферальный сайт. Я хотел бы использовать агрегацию, поскольку я слышал, что она довольно быстрая, и производительность здесь является проблемой.Mongodb Агрегат: Вложенные итоговые значения

У нас есть учетная запись db, у которой есть код страны и последний сайт реферала, связанный с каждой учетной записью.

{ 
    account:"user123", 
    CountryCode:"CA", 
    ReferalSite:"Google", 
    lastLogin:"someisodate" 
} 

Концептуально, я могу написать javascript через несколько минут.

For each unique vistor in accounts db; 
    visits[vistor.country_code][vistor.refferal_site]+= 1; 

Этот вопрос возможен с помощью db.accounts.aggregate()? Или это карта/уменьшить лучший способ сделать это.

Спасибо заранее,

+0

Похоже, у вас есть две коллекции, счета и визитов. Можете ли вы предоставить образец документа из каждого? Ни одна карта/не уменьшает рамки agg, но может запросить более чем одну коллекцию за раз. –

ответ

1

Вы можете запустить двумя группами, одна за другой:

db.collection.aggregate([ 
     {$group:{_id:{account:'$account', CountryCode:'$CouintryCode', ReferalSite:'$ReferalSite'}}, {number:1}}, 
     {$group:{_id:{CountryCode:'$_id.CountryCode', ReferalSite:'$_id.ReferalSite'}}, {number:{$sum:'$number'}}}])