Карта уменьшает количество тегов - PullRequest
0 голосов
/ 10 февраля 2012

Я занимаюсь разработкой веб-приложения с использованием Codeigniter и MongoDB.Я пытаюсь заставить карту работать меньше.

Я получил файл документа со следующей структурой.Я хотел бы сделать уменьшение карты, чтобы проверить, сколько раз используется каждый тег, и вывести его в коллекцию files.tags.

{
    "_id": {
        "$id": "4f26f21f09ab66c1030d0000e"
    },
    "basic": {
        "name": "The filename"
    },
    "tags": [
        "lorry",
        "house",
        "car",
        "bicycle"
    ],
    "updated_at": "2012-02-09 11:08:03"
}

Я пробовал эту команду уменьшения карты, но она не учитывает каждого отдельного человека.тег:

$map = new MongoCode ("function() {

 emit({tags: this.tags}, {count: 1});

}");

    $reduce = new MongoCode ("function( key , values ) {

     var count = 0;

     values.forEach(function(v) {
      count += v['count'];
     });

     return {count: count};

    }");

    $this->mongo_db->command (array (

     "mapreduce" => "files",   
     "map"       => $map,   
     "reduce"    => $reduce,   
     "out"       => "files.tags"

    )

    );

Ответы [ 3 ]

2 голосов
/ 10 февраля 2012

Измените функцию карты на:

function map(){
  if(!this.tags) return;
  this.tags.forEach(function(tag){
      emit(tag, {count: 1});
  });
}
1 голос
/ 10 февраля 2012

Да, эту карту / уменьшить просто рассчитать общее количество тегов.

В поваренной книге mongodb есть пример , который вы ищете.

Вы должны испустить каждый тег вместо всей коллекции тегов:

map = function() {
    if (!this.tags) {
        return;
    }

    for (index in this.tags) {
        emit(this.tags[index], 1);
    }
}
1 голос
/ 10 февраля 2012

Вам потребуется вызывать emit один раз для каждого тега во входных документах.

Документация MongoDB, например, говорит:

Функция карты вызывает emit (ключ, значение)любое количество раз для подачи данных в редуктор.В большинстве случаев вы будете излучать один раз для каждого входного документа, но в некоторых случаях, например при подсчете тегов, данный документ может иметь один, несколько или даже нулевые теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...