MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Execute map reduce para todas as chaves em coleções - mongodb


Usar um map/reduce para essa tarefa simples é como usar uma marreta (comparativamente lenta) para quebrar uma noz. A estrutura de agregação foi basicamente inventado para esse tipo de agregação simples (e pode fazer muito mais por você!):
db.order.aggregate([
    { "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
    { "$out": "order_total"}
])

Dependendo do seu caso de uso, você pode até mesmo omitir o $out encenar e consumir os resultados diretamente.
> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }

Observe que, com coleções muito grandes, isso provavelmente não é adequado, pois demora um pouco (mas ainda deve ser mais rápido que uma operação de map/reduce).

Para encontrar o número de pedidos de um único cliente, você pode usar uma consulta simples e usar o cursor.count() método:
> db.orders.find({ "customer": "a" }).count()
3