Home

Tags

MongoDB map_reduce, подсчет тегов

2010-05-27 mongodb map_reduce

Пример для подсчета тегов

# coding: utf8

from pymongo import Connection
from pymongo.code import Code

con = Connection()
con.drop_database('test')
db = con.test

db.posts.insert({ 'tags':['linux','prog'] })
db.posts.insert({ 'tags':['prog','mac'] })
db.posts.insert({ 'tags':['linux'] })
db.posts.insert({ 'tags':['linux'] })

map = Code(""" function()  {  
        this.tags.forEach(  
            function(x) {  
                emit(x, 1);  
            }  
        );  
    }""")

reduce = Code("""function (key, values) {
      var total = 0;
      for(var i in values) total += values[i];
      return total;
    }""")

for x in db.posts.inline_map_reduce(map, reduce):
    print x
Результат
 {u'_id': u'linux', u'value': 3.0}
{u'_id': u'mac', u'value': 1.0}
{u'_id': u'prog', u'value': 2.0}



Примечание
В старой версии pymongo (<1.10), метода inline_map_reduce нет, вместо его нужно использовать map_reduce:
db.posts.map_reduce(map, reduce).find()