MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo:policz liczbę wystąpień słów w zestawie dokumentów

MapReduce może być dobrym rozwiązaniem, które może przetwarzać dokumenty na serwerze bez manipulacji na kliencie (ponieważ nie ma funkcji dzielenia ciągu na serwerze DB (otwarty problem).

Zacznij od map funkcjonować. W poniższym przykładzie (który prawdopodobnie musi być bardziej niezawodny) każdy dokument jest przekazywany do map funkcja (jako this ). Kod szuka summary pole, a jeśli tam jest, zmniejsza je małymi literami, dzieli na spację, a następnie emituje 1 dla każdego znalezionego słowa.

var map = function() {  
    var summary = this.summary;
    if (summary) { 
        // quick lowercase to normalize per your requirements
        summary = summary.toLowerCase().split(" "); 
        for (var i = summary.length - 1; i >= 0; i--) {
            // might want to remove punctuation, etc. here
            if (summary[i])  {      // make sure there's something
               emit(summary[i], 1); // store a 1 for each word
            }
        }
    }
};

Następnie w reduce funkcja, sumuje wszystkie wyniki znalezione przez map funkcja i zwraca dyskretną sumę dla każdego słowa, które zostało emit ted powyżej.

var reduce = function( key, values ) {    
    var count = 0;    
    values.forEach(function(v) {            
        count +=v;    
    });
    return count;
}

Na koniec wykonaj mapReduce:

> db.so.mapReduce(map, reduce, {out: "word_count"})

Wyniki z przykładowymi danymi:

> db.word_count.find().sort({value:-1})
{ "_id" : "is", "value" : 3 }
{ "_id" : "bad", "value" : 2 }
{ "_id" : "good", "value" : 2 }
{ "_id" : "this", "value" : 2 }
{ "_id" : "neither", "value" : 1 }
{ "_id" : "or", "value" : 1 }
{ "_id" : "something", "value" : 1 }
{ "_id" : "that", "value" : 1 }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Najlepszy sposób na przechowywanie daty/godziny w mongodb

  2. Promise i sterownik nodejs MongoDB

  3. Jak ustawić useMongoClient (Mongoose 4.11.0)?

  4. Używasz generatorów Active Record po instalacji Mongoid?

  5. Zaimplementuj funkcję autouzupełniania za pomocą wyszukiwania MongoDB