我正在努力研究如何从Mongo系列中获得一组10个随机物品。我的计划是在Redis中存储一组Mongo ID,使用Redis SRANDMEMBER命令获取10个随机ID,然后从Mongo集合中获取它们。
由于我正在使用Node,因此我无法使用SRANDMEMBER 10,因为节点“redis”包不接受可选的第二个参数。
我真正磕磕绊绊的是如何以异步友好的方式做到这一点。我尝试使用节点异步库提供的几个工具,例如Waterfall和While,但Redis调用总是比数据晚。
编辑#2:
在回答下面的帮助时,我已经完善了以下功能:
client.send_command("SRANDMEMBER", ["album_id_set", "10"], function(err, results) {
if (err) console.log('Redis error: ' + err);
Album.find({
'_id' : { $in: results }
}, function(err, result){
if (err) console.log('Mongo error: ' + err);
response.json(result);
});
});
答案 0 :(得分:2)
使用redis
或node-redis
包的解决方案是发送原始命令
我已经测试了两个软件包并且都适合我。
https://github.com/tim-smart/node-redis
node-redis
返回一个缓冲对象数组。
client.sendCommand('SRANDMEMBER', ['album_id_set', '10'], function(err, reply) {
for (var i = 0; i < reply.length; i++) {
console.log(reply[i].toString());
};
});
https://github.com/mranney/node_redis
redis
返回一个字符串数组。
client.send_command('SRANDMEMBER', ['album_id_set', '10'], console.log);
有关详细信息,请参阅send_command文档。