我在MongoDB中有如下结构:
{
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中使用mongoose
答案 0 :(得分:1)
首先需要确定您的分组_id
。您可以使用memberId
,platform
,channel
和page
,$sum
每个$ip
的所有文档计数标识具有唯一标记值的单个页面,并且$group
添加另一个$sum
来计算不同的IP和每页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);)
})
:
git clone administrator@myserverip:/cygdrive/c/cossh/home/admin/git/vacationsabroad.git
您可以找到样本输出/输出documentation