2014-02-06 2 views
0

У меня есть коллекция, чьи документы имеют следующую структуру:карта-свертка для сортировки

{ 
    "_id" : ObjectId("XXXX"), 
    "data" : "stuff", 
    "type" : "X", 
    "location" : [XX, XX], 
    "datetime" : {stuff}, 
    "user" : 453, 
    "userName" : "XXX", 
    "timestamp" : XXXX, 
    "device" : XXXX 
} 

мне нужно знать, какое устройство использует для каждого пользователя.

Поскольку каждый документ является записью журнала, на пользователя может быть много. Так что мне нужно сделать, чтобы обернуть их для каждого пользователя.

Я делаю это в php rigth сейчас, но это длится долго, есть около 2k пользователей и журналы 60k, поэтому я думаю, что использование map-reduce было бы лучшим вариантом для этого.

Я не совсем понимаю, как уменьшить карту, я просто начал работу. Не могли бы вы показать мне пример?

ответ

1

Как использовать простой агрегат.

db.yourcollection.aggregate([ 

    {$match : { user : 453}}, 
    {$group : {_id : "$user", devices: {$push : "$device"}}} 
]); 

Это возвращает все устройства (сохраненные в массиве с именем устройства) для пользователя 453.

+0

спасибо! Я попробую это. – leojg

Смежные вопросы