Я работаю над набором, где мне нужно использовать пакетные запросы из-за Доктрины — и Монго — reduce
выходные ограничения. Однако я ошеломлен тем, как это сделать.
Доктрина ОДМ MapReduce
не позволяет Skip
вариант. Тем не менее, я нашел и прочитал о введении переменной в Scope
(скажем n
), где он может выступать в качестве глобального счетчика для MapReduce
и с if()
проверить, что он может эффективно пропускать испускает, где счетчик меньше, чем n
,
Тем не менее, эти объяснения были для реализации MongoDB JS (mongoose и т. Д.), Тогда как я работаю с Doctrine ODM, поэтому я не знаю, как это сделать.
Заранее спасибо.
После небольшого копания 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
Других решений пока нет …