私はこのように参加しているmongodbコレクションを持っています
{
_id:
sender:
receiver:
}
mapreduceを使用する場合と使用しない場合で、コレクションの送信者と受信者のトップNを取得する方法はありますか?私はmongodbルビードライバーを使用しています。
私はこのように参加しているmongodbコレクションを持っています
{
_id:
sender:
receiver:
}
mapreduceを使用する場合と使用しない場合で、コレクションの送信者と受信者のトップNを取得する方法はありますか?私はmongodbルビードライバーを使用しています。
可能であれば、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
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
}
]