1

Mongo コレクションから 10 個のランダムなアイテムのセットを取得する最善の方法を見つけようとしています。私の計画は、一連の Mongo ID を Redis に保存し、Redis SRANDMEMBER コマンドを使用して 10 個のランダム ID を取得し、Mongo コレクションから取得することです。

ノードを使用しているため、SRANDMEMBER 10 を使用できません。これは、ノードの「redis」パッケージがオプションの 2 番目のパラメーターを受け入れないためです。

私が本当につまずいているのは、これを非同期に適した方法で行う方法です。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

redisまたはパッケージを使用した解決策はnode-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 に答える