MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да групирате изхода mongodb - mapReduce?

Опитайте това,

db.order.mapReduce(function() { emit (this.customer,{count:1,orderDate:this.orderDate.interval_start}) },
function(key,values){ 
var category; // add this new field
var sum =0 ; var lastOrderDate;  
values.forEach(function(value) {
 if(value['orderDate']){ 
    lastOrderDate=value['orderDate'];
}  
sum+=value['count'];
}); 
// at this point you are already aware in which category your records lies , just add a new field to mark it
 if(sum < 5){ category: userLessThan5};
 if(sum >= 5 && sum <=10){ category: user5to10};
 if(sum <= 10 && sum >= 15){ category: user10to15};
 if(sum <= 15 && sum >=20){ category: user15to20};
  ....
return {count:sum,lastOrderDate:lastOrderDate,category:category}; 
},
{ query:{status:"DELIVERED"},out:"order_total"}).find()
 db.order_total.aggregate([{ $group: { "_id": "$value.category", "users": { $sum: 1 } } }]);

ще получите желания резултат

{userLessThan5: 9 }
{user5to10: 2 }
{user10to15: 1 }
{user15to20: 0 }
 ....


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как използвате arrayFilters с mongoose 5.x.x?

  2. Най-добрият начин за групиране по дата с Mongoid

  3. SCUMM:Инфраструктура за мониторинг на база данни, базирана на агенти в ClusterControl

  4. Отдалеченото и локалното удостоверяване е неуспешно на Mongo DB 3.0.7 (инсталиран на Amazon EC2)

  5. Как да изпълнявам монго команди чрез скриптове на шел?