2013-03-27 4 views
2

Недавно я обновился до MongoDB 2.4 и, как указано в примечаниях к выпуску, у меня проблема с функцией карты, которая использует db. В примечаниях к выпуску рекомендуется рефакторинг, но я не понимаю, какой маршрут мне нужно принять.MongoDB 2.4 MapReduce Refactor

Ныне нерабочая часть функции выглядит следующим образом:

function map() { 
    var student = db.student.findOne(this.student_id); 
    var school = db.school.findOne(this.school_id); 
    ... 
    emit({ 
    bcg_id: student.bcg_id, 
    ... 

Я неясна о том, как передать документ из сборника «студента» переменный «студента» теперь, когда дб устарела ,

Любые рекомендации?

ответ

1

Вы больше не можете запускать запрос внутри функции javascript.

См: http://docs.mongodb.org/manual/release-notes/2.4/#additional-limitations-for-map-reduce-and-where-operations

Вы можете передать данные в области видимости, например:

res = t.mapReduce(mapper , reducer , { scope : { xx : 1 } }); 

Но о том, как больше рефакторинг - это зависит от того, что исходная карта уменьшить функцию сделал.

Возможно, вам захочется собрать все данные, необходимые в новую коллекцию, а затем вместо этого выполнить сокращение карты.

+0

Спасибо Росс, я думаю, что я должен иметь возможность обойти отсутствие запросов внутри функций. Из-за любопытства, какова была цель этого изменения? – dphase