Doctrine ODM (MongoDB) MapReduce + 跳过

Doctrine ODM (MongoDB) MapReduce + Skip

我正在处理一个集合,由于 Doctrine 和 Mongo 的 reduce 输出限制,我需要使用批量查询。但是,我对如何这样做感到震惊。

Doctrine ODM 的 MapReduce 不允许 Skip 选项。但是,我发现并阅读了有关将变量注入 Scope(比方说 n)的信息,它可以充当 MapReduce 的全局计数器,并带有 if() 检查它是否可以有效地跳过计数器小于 n.

的发射

但是,这些解释是针对 MongoDB 的 JS 实现(猫鼬等),而我正在使用 Doctrine ODM,所以我不知道如何去做。

提前致谢。

经过 QueryBuilder class 的一些挖掘后,我发现 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()

然后我用 if (counter >= skip && counter < (skip+100))

将所有内容包装在我的 map 函数中
$map = "function(){
  if (counter >= skip && counter < (skip+100))
  { 
    .
    .
    .
    emit( key, value ); 
  }";

然后我在 PHP 批处理循环中递增 $BatchSkip

$BatchSkip+=100;

这就是诀窍。 参考:MongoDB mapReduce 选项: https://docs.mongodb.com/manual/reference/command/mapReduce/#mapreduce