各ドキュメントが仮想オークションを表すコレクションがあります。特定の期間で最も一般的なアイテムIDを見つけたい。SQLでは、通常の並べ替えと制限をSELECT item, COUNT(*) as count
使用します。GROUP BY item
これに相当するmongodbはありますか?
質問する
150 次
2 に答える
2
MongoDBにはここにいくつかのオプションがあります。
- バージョン2.1.0以降では、新しいAggregationFrameworkを使用できます。ここに換算表があります。
- 古いバージョンでは、Map/Reduceのいずれかを使用できます
- 単純なバージョンの集計では、特別な集計演算子を使用できます。
これらの各オプションは、異なる構文と異なる速度を持ちます。
これらのいずれの場合でも、これらのオプションは比較的遅いと思われます。Map / Reduceジョブは、「オフライン」で実行することを目的としており、通常は「cronジョブ」または「スケジュールされたタスク」として実行されます。これを頻繁に行う予定の場合は、このデータを事前に集計することをお勧めします。
于 2012-07-06T23:14:25.257 に答える
0
または、MapReduceを使用してから出力コレクションを並べ替えることも、コマンドグループを使用することもできますが、並べ替えと制限のほとんどはクライアント側で行う必要があります。
グループコマンドの例:
db.coll.group(
{key: { a:true, b:true },
cond: { active:1 },
reduce: function(obj,prev) { prev.csum += obj.c; },
initial: { csum: 0 }
});
また、mongodb(2.2)の次の安定バージョンでは、この操作をはるかに簡単にする新しい集約フレームワークがリリースされることにも言及する価値があります。
于 2012-07-06T23:19:05.440 に答える