Category Archives: 10gen: M102 MongoDB for DBAs

Конспект лекций M102 MongoDB for DBAs (Week 3)


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/www/bezhaco/data/www/bezha.od.ua/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/www/bezhaco/data/www/bezha.od.ua/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /var/www/bezhaco/data/www/bezha.od.ua/wp-content/plugins/wp-syntax/wp-syntax.php on line 383

Прочитать: MongoDB Schema Design

Aggregation Framework
Работает с версией v2.2+

# mongo --version
MongoDB shell version: 2.2.1

Устанавливайте MongoDB из официального репозитория

Map/Reduce О сложных вещах простыми словами. Так, как я рассказывал бы это своей бабушке.
Map/Reduce в подкасте Радио-T
MongoDB MapReduce

Обычно в ситуациях где необходимо использовать GROUP BY в SQL, map/reduce правильное решение в MongoDB.

Пример Map/Reduce

# mongo
> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );
> db.things.insert( { _id : 2, tags : ['cat'] } );
> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );
> db.things.insert( { _id : 4, tags : []  } );

Map function

> m = function(){
...    this.tags.forEach(
...        function(z){
...            emit( z , { count : 1 } );
...        }
...    );
};

Reduce function

> r = function( key , values ){
...    var total = 0;
...    for ( var i=0; i<values.length; i++ )
...        total += values[i].count;
...    return { count : total };
};

Результат

> res = db.things.mapReduce(m, r, { out : "myoutput" } );
> db.myoutput.find()
{"_id" : "cat" , "value" : {"count" : 3}}
{"_id" : "dog" , "value" : {"count" : 2}}
{"_id" : "mouse" , "value" : {"count" : 1}}