gpt4 book ai didi

mongodb mapreduce - 在reduce中构建一个数组或对象?

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

原始集合:

{ 
"_id" : ObjectId('xxxxxxxxxxxxxxxx'),
"userId" : ObjectId('yyyyyyyyyyyyyyyy'),
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzz')
},
{
"_id" : ObjectId('uuuuuuuuuuuuuuuuuu'),
"userId" : ObjectId('aaaaaaaaaaaaaaaa'),
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzz')
}

发出:

emit(this.urlId, {userId: this.userId, visitCount: this.visitCount});

减少:

function(key, values) {
var visitCount = 0;
var userVC = new Array();
values.forEach(function(doc) {


NOT SURE WHAT TO PUT HERE TO ACHIEVE DESIRED OUTPUT COLLECTION


});
return {urlId: key, userVC: userVC};
};

所需的 MR 输出集合:

{
"_id" : ObjectId('zzzzzzzzzzzzzzzzzzzz'),
"value" : {
"urlId" : ObjectId('zzzzzzzzzzzzzzzzzzzz'),
"userVC" : {
ObjectId('yyyyyyyyyyyyyyyy') : <total visit count for this userId on this urlId>,
ObjectId('aaaaaaaaaaaaaaaa') : <total visit count for this userId on this urlId>
}
}

最佳答案

您想知道每位用户访问您网站上每个单独网址的次数吗?我认为您会希望以不同的方式解决这个问题。

发出 url/用户访问的计数:

emit( { urlId: this.urlId, userId: this.userId }, { count: 1 } );

用 reduce 计算它们:

r = function( key , values ){
var total = 0;
for ( var i=0; i<values.length; i++ )
total += values[i].count;
return { count : total };
};

然后,如果您真的想要您声明的所需输出,您可以在最终确定步骤中执行此操作。但我认为它不能很好地扩展到 N 个用户。

这是一个不能完全满足您既定目标的链接,但我发现在尝试了解这些 mongodb mapreduce 函数的工作原理时非常有用:

http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

关于mongodb mapreduce - 在reduce中构建一个数组或对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599002/

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