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

MongoDB изберете брой (различен x) в индексирана колона - брой уникални резултати за големи набори от данни

1) Най-лесният начин да направите това е чрез рамката за агрегиране. Това отнема две команди "$group":първата групира по различни стойности, втората брои всички различни стойности

pipeline = [ 
    { $group: { _id: "$myIndexedNonUniqueField"}  },
    { $group: { _id: 1, count: { $sum: 1 } } }
];

//
// Run the aggregation command
//
R = db.runCommand( 
    {
    "aggregate": "myCollection" , 
    "pipeline": pipeline
    }
);
printjson(R);

2) Ако искате да направите това с Map/Reduce, можете. Това също е двуфазен процес:в първата фаза изграждаме нова колекция със списък на всяка отделна стойност за ключа. Във втория правим count() за новата колекция.

var SOURCE = db.myCollection;
var DEST = db.distinct
DEST.drop();


map = function() {
  emit( this.myIndexedNonUniqueField , {count: 1});
}

reduce = function(key, values) {
  var count = 0;

  values.forEach(function(v) {
    count += v['count'];        // count each distinct value for lagniappe
  });

  return {count: count};
};

//
// run map/reduce
//
res = SOURCE.mapReduce( map, reduce, 
    { out: 'distinct', 
     verbose: true
    }
    );

print( "distinct count= " + res.counts.output );
print( "distinct count=", DEST.count() );

Имайте предвид, че не можете да върнете резултата от картата/намаляването на линия, защото това потенциално ще надхвърли ограничението за размер на документа от 16 MB. Вие можете запишете изчислението в колекция и след това пребройте() размера на колекцията или можете да получите броя на резултатите от върнатата стойност на mapReduce().



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Уникалният индекс в mongoose не работи

  2. MongoDb чрез jndi

  3. MongoDB:как да анализирам дата във версия 3.6 mongoDb?

  4. Трябва ли изрично да затварям връзката?

  5. Как да конвертирате комплект реплики на MongoDB в самостоятелен сървър