【发布时间】:2014-12-17 17:45:13
【问题描述】:
我想了解一段时间内每个品牌销售了多少独特产品。单个文档如下所示:
{
brand_id: 1,
product_id: 2,
date: ISODate("2014-12-12")
}
在 SQL 中,这将是:SELECT brand_id, count(distinct(product_id)) FROM orders WHERE date ... GROUP BY brand_id;
我无法通过 Mongo 的聚合框架(组等)找到一种方法。这是我现在拥有的 map-reduce:
db.orders.mapReduce(
function() {
emit(this.brand_id, this.product_id);
},
function(key, values) {
return values.filter(function (value, index, self) {return self.indexOf(value) === index;}).length;
},
{
query: {date: {$gte: new Date('2014-11-20')}},
out: "example"
}
)
这看起来很不错。但是,我遇到了一个问题,reduce 函数不是一次接收所有“值”,而是分批接收 101 个元素。因此,任何寻找唯一值的尝试都会失败,我得到的只是最后一次调用 reduce 函数时唯一元素的数量。我不知道如何在这里使用“finalize”属性来获得我想要的东西。
任何想法将不胜感激。
我在 Mongo 2.4 和 2.6 上试过这个,只是为了确保它不是版本问题。
【问题讨论】:
标签: mongodb