Я реализовал соотношение продуктов Пирсона через карту / уменьшить / завершить. Недостающая часть заключается в ограничении документов (представляющих пользователей), которые будут обрабатываться с помощью фильтра. Для простого запроса типа
mapreduce(mapper, reducer, :finalize => finalizer, :query => { :name => 'Bernd' })
Я получаю это на работу.
Но мои критерии фильтрации немного сложнее: у меня есть один набор предпочтений, который должен иметь хотя бы один общий элемент, и другой набор предпочтений, который может не иметь общего элемента. На более позднем этапе я также хочу ограничить это документами (пользователями) в пределах определенного географического расстояния.
В настоящее время у меня есть этот код, работающий в моей функции карты, но я бы предпочел разделить его на параметры запроса, поддерживаемые mongoid или функцией javascript. Все мои попытки решить эту проблему не увенчались успехом, поскольку код либо игнорируется, либо выдает ошибку.
Я сделал пару тестов.
[результаты удалены, см. Ниже]
Я использую гемы ruby 1.9.2, mongodb 1.6.5-x86_64 и mongoid 2.0.0.beta.20, mongo 1.1.5 и bson 1.1.5 на MacOS.
Что я делаю не так?
Заранее спасибо.
Дополнительные тесты (проблема частично решена):
User.where(:name.in => ["Arno", "Bernd", "Claudia"])
работает, однако при использовании mapreduce вот так
mapreduce(..., :query => { :name.in => ['Arno', 'Bernd', 'Claudia'] })
приводит к ошибке bson serialize: ключи должны быть строками или символами (TypeError) , упомянутыми выше.
Замена :name.in
на 'name.in'
или 'name.$in'
приводит к тому, что запрос не возвращает результатов (предположим, что он передается как есть на mongodb).
Однако
mapreduce(..., :query => { :name => { '$in' => ['Arno', 'Bernd', 'Claudia'] } })
работает, но у меня не было успеха с моими попытками геопространственного запроса, независимо от того, как я написал выражение.
mapreduce(..., :query => {:location => { "$near" => [ 13, 52, 1 ] } })
приводит к этому сообщению об ошибке: Команда базы данных 'mapreduce' завершилась неудачно: {"assertion" => "Конфигурация ручного сопоставления не разрешена", ... .
Если бы кто-нибудь мог дать мне идею, как написать геопространственный запрос, используя near
или within
и работая с mapreduce, я был бы очень счастлив. (Я еще не играл с сетами, см. Выше).