gpt4 book ai didi

javascript - 使用 JavaScript 在 Riak kv 中进行 MapReduce

转载 作者:行者123 更新时间:2023-12-03 06:05:43 29 4
gpt4 key购买 nike

我在 Riak DB 上有以下格式的数据:

Bakshi - {u'friendlist': [u'Sita', u' Hari', u' Shyam', u' Howard', u' Bindu', u' Kishna', u' Karma', u' Dinesh'], u'is_active': True, u'user': u'Bakshi'}

这里通过 Map/Reduce 获取数据

client = riak.RiakClient()
user_bucket = client.add('userfriendlist')

user_bucket.map("""
function(v){
var data = JSON.parse(v.values[0].data);
if(data.is_active == true){
tempUser = data.user;
tempFriendlist = data.friendlist;
for (var i=0; i<tempFriendlist.length; i++){
friendValue = tempFriendlist[i];
return [[tempUser,friendValue]];

}
}
}

""")

并打印返回值

for result in user_bucket.run():
print "%s - %s" % (result[0],result[1]);

它给出的输出如下:

Bakshi - Sita

但是预期的输出是:

Bakshi - Sita
Bakshi- Hari
Bakshi- Shyam
Bakshi- Howard
Bakshi- Bindu
Bakshi- Kishna
Bakshi- Karma
Bakshi- Dinesh

我在这里做错了什么,我不能在map()内部进行迭代?

最佳答案

我对你正在使用的技术不是很熟悉,但是考虑到映射在JS中的工作原理,我认为你一直在做的就是返回第一个元素作为函数中的结果。即,您返回 [Bakshi - Sita] 作为结果,然后映射函数一旦到达返回值就会停止。

我认为你需要做这样的事情:

user_bucket.map("""
function(v){
var data = JSON.parse(v.values[0].data);
var mapped = [];
if(data.is_active == true){
tempUser = data.user;
tempFriendlist = data.friendlist;
for (var i=0; i<tempFriendlist.length; i++){
friendValue = tempFriendlist[i];
mapped.push[[tempUser, friendValue]];
}
}
return mapped; //if data.is_active == false, it will return empty array if you return here. If you want to return undefined for data.is_active == false, put this return statement inside your if, as the last thing after your for loop.
}

""")

希望这对您有帮助。

关于javascript - 使用 JavaScript 在 Riak kv 中进行 MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39559478/

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