Доктрина ODM (MongoDB) MapReduce + Пропустить

Я работаю над набором, где мне нужно использовать пакетные запросы из-за Доктрины — и Монго — reduce выходные ограничения. Однако я ошеломлен тем, как это сделать.

Доктрина ОДМ MapReduce не позволяет Skip вариант. Тем не менее, я нашел и прочитал о введении переменной в Scope (скажем n), где он может выступать в качестве глобального счетчика для MapReduceи с if() проверить, что он может эффективно пропускать испускает, где счетчик меньше, чем n,

Тем не менее, эти объяснения были для реализации MongoDB JS (mongoose и т. Д.), Тогда как я работаю с Doctrine ODM, поэтому я не знаю, как это сделать.

Заранее спасибо.

0

Решение

После небольшого копания QueryBuilder класс, я нашел mapReduceOptions(array) поэтому добавили следующее к моему запросу после map:

->mapReduceOptions(array('scope'=>array('skip'=>$BatchSkip,'counter'=>0)))`

то есть

->map($map)
->mapReduceOptions(array('scope'=>array('skip'=>$BatchSkip,'counter'=>0)))
->reduce($reduce)
->getQuery()->execute()

Затем я завернул все в моем map функция с if (counter >= skip && counter < (skip+100))

$map = "function(){
if (counter >= skip && counter < (skip+100))
{
.
.
.
emit( key, value );
}";

и я увеличиваю $BatchSkip в моем PHP пакетном цикле.

$BatchSkip+=100;

Это делает трюк.
Ссылка: MongoDB mapReduce опции:
https://docs.mongodb.com/manual/reference/command/mapReduce/#mapreduce

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]