1

我正在尝试找出如何最好地从 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);
    });
});
4

1 回答 1

2

使用redisornode-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());
    };
});

使用 redis 包

https://github.com/mranney/node_redis

redis返回一个字符串数组。

client.send_command('SRANDMEMBER', ['album_id_set', '10'], console.log);

有关详细信息,请参阅send_command文档。

于 2013-01-22T08:02:16.343 回答