2017-02-19 3 views
1

У меня есть структура, как показано ниже в MongoDB:Как сделать множественный поиск агрегированных mongoose?

{ 
    memberId: 1236, 
    platform: "PC", 
    channel: "A", 
    page: "B", 
    ip: "192.168.10.1", 
    isActive: true, 
    createOn: "2017-02-19T09:28:43.688Z", 
    isSubmit: false, 
} 

Теперь мне нужно сделать совокупный поиск следующим образом:

{ 

    memberId: 1236, 
    platform: "PC", 
    channel: "A", 
    page: "B", 
    pv: 111, 
    uv: 10 
} 

uv (просмотры пользователей) только на основе pv (просмотров страниц) отчетливый по ip.

Как выполнить множественный поиск по совокупности?

Я могу получить только один, либо pv, либо uv, но не может получить их все одновременно.

Я использую мангуст в node.js

ответ

0

Вы должны сначала определить, что ваша группировка _id. Вы можете определить одну страницу с уникальной парой значений memberId, platform, channel и page, $sum сосчитать весь документ за $ip и добавить еще один $group сосчитать отчетливый IP и $sum на страницу:

Data.aggregate([{ 
    $group: { 
     _id: { 
      memberId: "$memberId", 
      platform: "$platform", 
      channel: "$channel", 
      page: "$page", 
      ip: "$ip" 
     }, 
     pv: { 
      $sum: 1 
     } 
    } 
}, { 
    $group: { 
     _id: { 
      memberId: "$_id.memberId", 
      platform: "$_id.platform", 
      channel: "$_id.channel", 
      page: "$_id.page" 
     }, 
     pv: { 
      $sum: "$pv" 
     }, 
     uv: { 
      $sum: 1 
     } 
    } 
}], function(err, res) { 
    if (err) 
     console.log(err); 
    else 
     console.log(res);) 
}) 

Вы можете найти пример вывод/output here

+0

спасибо! Теперь я уже решил эту проблему с вашей помощью. В начале я также попытался использовать две или более группы $, но моя логика не правильная, поэтому я не могу ее решить. – duoduo

+0

Вас приветствуют, вы можете принять ответ, если он –

Смежные вопросы