我有以下子文档:
{
"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"}
]
}
到目前为止和以下查询:
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
}
]
我想实现以下输出结果,或非常相似的:
[
{
"2.2.2.2": 1,
"1.1.1.1": 3
}
]
其中每个键都是_id
,而值是关联的count
。这有可能实现吗?
我到目前为止已尝试在aggregate
管道的末尾添加一个$project
文档,如下所示:
{
"$project": {
"_id": 0,
"$_id": "$count"
}
}
但似乎这不起作用。有没有办法实现我想要的查询结果或者我应该坚持到目前为止所做的事情而忘记它,因为它不可能实现?
答案 0 :(得分:2)
汇总框架无法从值输出键名称。在我们的应用程序层中执行此操作的最佳位置。正如评论中所建议的那样,您可以使用map reduce框架或forEach
来实现此目的,但是,它们的性能通常较差,特别是在分片环境中,请参阅documentation。