我想要实现的目标
假设有以下子文档:
{
"id":1,
"url":"mysite.com",
"views":
[
{"ip":"1.1.1.1","date":"01-01-2015"},
{"ip":"2.2.2.2","date":"01-01-2015"},
{"ip":"1.1.1.1","date":"01-01-2015"},
{"ip":"1.1.1.1","date":"01-01-2015"}
]
}
我想计算:
- 基于
"ip"
值有多少个IP地址 - 并且计算
"views"
中子文档的总数
如果可能,在同一个查询中达到以下结果:
[
{
"_id":"2.2.2.2",
"count":1
},
{
"_id":"1.1.1.1",
"count":3
},
{
"_id":"total",
"count":4
}
]
我取得的成就
通过使用MongoDB聚合框架,我以以下方式实现了第一个要点1.
db.collection.aggregate([
{
"$unwind": "$views"
},
{
"$group": {
"_id": "$views.ip",
"count": {
"$sum": 1
}
}
}
])
这会返回:
[
{
"_id":"2.2.2.2",
"count":1
},
{
"_id":"1.1.1.1",
"count":3
}
]
我希望返回数组中多余的文档,即:
{
"_id":"total",
"count":4
}
为了实现我上面所说的,但是我卡在那里,一直无法做到。