【发布时间】:2015-06-30 01:05:25
【问题描述】:
我有以下记录:
{ "_id" : ObjectId("55889370ba09474fd178d8b8"), "url" : "http://stackoverflow.com/questions/ask"}
{ "_id" : ObjectId("55889370ba09474fd178d8b4"), "url" : "http://stackoverflow.com"}
{ "_id" : ObjectId("55889370ba09474fd178d8b2"), "url" : "http://espn.com"}
我想做一个聚合来获取每个站点的根数。基本上我希望前两条记录都属于同一组(它们具有相同的根)。
我创建了一个用户定义的函数来将 url 转换为其根。我的想法是使用用户定义的函数首先投影记录(更改 url 字段),然后按 url 分组。问题是显然用户定义的函数不能用于聚合。它们可以在投影的 where 子句中使用,但带有 where 子句的投影不能在聚合中使用。
有什么方法可以聚合我需要的吗?
编辑:
也许为了使示例更具说明性,我应该补充一点,例如,如果我想按根网站分组并计算它们,我会得到如下信息:
{ "_id" : "http://stackoverflow.com", "count" : 2}
{ "_id" : "http://espn.com", "count" : 1}
【问题讨论】:
-
您实际上是在使用
$regex寻找$project过滤器,但目前聚合框架没有此功能,有一个开放的 JIRA 在这里 SERVER-11947. -
那么目前没有办法吗?没有其他选择?
-
另一种方法是使用 Map-Reduce
-
@chridam 是的,Map-Reduce 可能是唯一的方法,但我正在寻找更简单的方法。
标签: mongodb aggregation-framework