gpt4 book ai didi

mongodb - 如何映射减少组、排序和计数排序值

转载 作者:可可西里 更新时间:2023-11-01 09:14:34 25 4
gpt4 key购买 nike

我在使用 mapreduce 时遇到了一些问题。

我想对集合中的一些值进行分组、排序和计数。我有这样的收藏:

----------------------------
| item_id | date |
----------------------------
| 1 | 01/15/2012 |
----------------------------
| 2 | 01/01/2012 |
----------------------------
| 1 | 01/15/2012 |
----------------------------
| 1 | 01/01/2012 |
----------------------------
| 2 | 01/03/2012 |
----------------------------
| 2 | 01/03/2012 |
----------------------------
| 1 | 01/01/2012 |
----------------------------
| 1 | 01/01/2012 |
----------------------------
| 2 | 01/01/2012 |
----------------------------
| 2 | 01/01/2012 |
----------------------------

我想按 item_id 分组并按天计算每个项目的日期并对每个项目的日期进行排序并得到如下结果:

value: {{item_id:1, date:{01/01/2012:3, 01/15/2012:2 }},{item_id:2, date:{01/01/2012:3, 01/03/2012:2 }}}

我使用mapReduce:

m=function()
{
emit(this.item_id, this.date);
}
r=function(key, values)
{
var res={};
values.forEach(function(v)
{
if(typeof res[v]!='undefined') ? res[v]+=1 : res[v]=1;
});
return res;
}

但我没有收到如下结果:

{{item_id:1, date:{01/01/2012:3, 01/15/2012:2 }},{item_id:2, date:{01/01/2012:3, 01/03/2012:2 }}}

有什么想法吗?

最佳答案

给定表单的输入文档:

> db.dates.findOne()
{ "_id" : 1, "item_id" : 1, "date" : "1/15/2012" }
>

以下 map 和 reduce 函数应该会产生您正在寻找的输出:

var map = function(){
myDate = this.date;
var value = {"item_id":this.item_id, "date":{}};
value.date[myDate] = 1;
emit(this.item_id, value);
}

var reduce = function(key, values){
output = {"item_id":key, "date":{}};
for(v in values){
for(thisDate in values[v].date){
if(output.date[thisDate] == null){
output.date[thisDate] = 1;
}else{
output.date[thisDate] += values[v].date[thisDate];
}
}
}
return output;
}

> db.runCommand({"mapReduce":"dates", map:map, reduce:reduce, out:{replace:"dates_output"}})

> db.dates_output.find()
{ "_id" : 1, "value" : { "item_id" : 1, "date" : { "1/15/2012" : 2, "1/01/2012" : 3 } } }
{ "_id" : 2, "value" : { "item_id" : 2, "date" : { "1/01/2012" : 3, "1/03/2012" : 2 } } }

希望上面的内容能满足您的需求,或者至少让您指明正确的方向。

有关将 Map Reduce 与 MongoDB 一起使用的更多信息,请参阅 Mongo 文档: http://www.mongodb.org/display/DOCS/MapReduce

MongoDB Cookbook 中还有一些额外的 Map Reduce 示例: http://cookbook.mongodb.org/

有关如何运行 Map Reduce 操作的分步演练,请参阅 MongoDB 食谱“使用版本化文档查找最大和最小值”的“其他”部分 http://cookbook.mongodb.org/patterns/finding_max_and_min/

祝你好运!

关于mongodb - 如何映射减少组、排序和计数排序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9976131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com