その単純なタスクにmap/reduceを使用することは、(比較的遅い)スレッジハンマーを使用してナットを割るのと少し似ています。 集約フレームワーク 基本的に、この種の単純な集計のために発明されました(そして、さらに多くのことができます!):
db.order.aggregate([
{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
{ "$out": "order_total"}
])
ユースケースによっては、$out
を省略することもできます 結果を直接ステージングして消費します。
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }
コレクションが非常に大きい場合は、時間がかかるため、これは適切ではない可能性が高いことに注意してください(ただし、map / reduce操作よりも高速である必要があります)。
1人の顧客の注文数を見つけるには、簡単なクエリを使用して、 cursor.count() 方法:
> db.orders.find({ "customer": "a" }).count()
3