1

私はこのように参加しているmongodbコレクションを持っています

{
      _id:
      sender:
      receiver:
}

mapreduceを使用する場合と使用しない場合で、コレクションの送信者と受信者のトップNを取得する方法はありますか?私はmongodbルビードライバーを使用しています。

4

2 に答える 2

1

可能であれば、MongoDB 2.2 (次の安定版リリース) で利用可能な新しい集計フレームワークをチェックします。これはあなたが達成しようとしていることですか?

入力:

{_id:1, name:"Jenna"}
{_id:2, name:"Jenna"}
{_id:3, name:"Tom"}
{_id:4, name:"Tom"}
{_id:5, name:"George"}
{_id:6, name:"George"}

指図:

> db.unicorn.aggregate({$group: {_id: "$name"}},{$limit:2})

結果:

{
    "result" : [
        {
            "_id" : "George"
        },
        {
            "_id" : "Tom"
        }
    ],
    "ok" : 1
}

www.mongodb.org/display/DOCS/Aggregation+Framework

于 2012-08-01T21:11:40.607 に答える
1

map reduce に関連付けられた limit パラメーターがありますが、ドキュメントには、シャード クラスターでは使用できないと記載されています。map reduce の結果を新しいコレクションに出力し、コレクションに対して .find().limit(n) クエリを実行できますか? それとも、そもそも出力を制限することに関心があるのは、長時間実行される集計コマンドを回避しようとしているからですか? または、私はあなたの質問を誤解しましたか?

入力:

{ "_id" : 1, "sender" : "Jenna"}
{ "_id" : 2, "sender" : "Jenna"}
{ "_id" : 3, "sender" : "George"}
{ "_id" : 4, "sender" : "George"}
{ "_id" : 5, "sender" : "Amy"}

MR機能

map = function () {
    emit(this.sender, 1);
}

reduce = function (key, values) {
    return 1;
}

出力:

"results" : [
        {
            "_id" : "Amy",
            "value" : 1
        },
        {
            "_id" : "George",
            "value" : 1
        },
        {
            "_id" : "Jenna",
            "value" : 1
        }
    ]
于 2012-08-03T06:40:49.337 に答える