sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongo:tæl antallet af ordforekomster i et sæt dokumenter

MapReduce kan være en god pasform, der kan behandle dokumenterne på serveren uden at foretage manipulation på klienten (da der ikke er en funktion til at opdele en streng på DB-serveren (åbent problem).

Start med map fungere. I eksemplet nedenfor (som sandsynligvis skal være mere robust), sendes hvert dokument til map funktion (som this ). Koden leder efter summary felt, og hvis det er der, skal du skrive det med små bogstaver, opdeles på et mellemrum og derefter udsende en 1 for hvert ord fundet.

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
            }
        }
    }
};

Derefter i reduce funktion, opsummerer den alle resultater fundet af map funktion og returnerer en diskret total for hvert ord, der var emit ted ovenfor.

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

Til sidst skal du udføre mapReduce:

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

Resultaterne med dine prøvedata:

> 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. Hvordan kan jeg forbruge tweets fra Twitters streaming-api og gemme dem i mongodb

  2. Brug af PouchDB med MongoDB

  3. MongoDB database kryptering

  4. Få alle feltnavne i en mongodb-samling?