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
我正在处理一个集合,由于 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