MongoDB MapReduce Stats Engine - PullRequest
       11

MongoDB MapReduce Stats Engine

0 голосов
/ 10 мая 2011

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

например. Один комплект документов может выглядеть так:

{"drink": "Tea","accompaniments": ["Biscuits","Crisps"]}
{"drink": "Tea","accompaniments": ["Biscuits"]}
{"drink": "Coffee","accompaniments": ["Biscuits","Crisps"]}
{"drink": "Coffee","accompaniments": ["Nuts","Biscuits"]}
{"drink": "Beer","accompaniments": ["Nuts","Crisps"]}
{"drink": "Beer","accompaniments": ["Nuts"]}
{"drink": "Beer","accompaniments": ["Crisps"]}

Здесь мне нужны результаты, такие как:

{drink:{Tea:2,Coffee:2,Beer:3},accompaniments:{biscuits:4,Crisps:4,Nuts:3}}

Другой набор документов может выглядеть следующим образом:

{"favcolor": "Red","shapes": ["Square","Circle"]}
{"favcolor": "Red","shapes": ["Square"]}
{"favcolor": "Green","shapes": ["Circle"]}

Может быть любое количество различных форматов документов.

Итак, я не могу «жестко закодировать» функции сокращения карты с помощью именованных ключей. Кроме того, обратите внимание, что мне нужно получать информацию из вложенных массивов и / или документов - я контролирую, как создаются документы, поэтому, если использовать один пример, я мог бы сделать массив сопровождения подходящим набором вложенных документов, если это необходимо (в этом примере они построены из флажков с множественным выбором).

Какая была бы наиболее эффективная функция уменьшения карты, чтобы получить всю статистику из каждого набора документов? Я очень надеюсь, что будет «одна» карта-редукция, которая сможет собирать данные из каждого набора. Большое спасибо.

1 Ответ

0 голосов
/ 11 мая 2011

Я не уверен в своей концепции, это просто идея.

Ваши два примера наборов данных имеют общую структуру. Оба содержат документы со свойствами to: один имеет строковое значение, второй - массив. Таким образом, ваша карта-сокращение должна перебирать свойства документа и проверять тип конкретного свойства. Затем агрегируйте в соответствии с типом и именем свойства.

...