2017-03-24 18 views
0

私はDoctrineとMongoの - reduce出力制限のためにバッチクエリを使用する必要があるセットで作業しています。しかし、私はそれをどうやって行うのか愚痴です。Doctrine ODM(MongoDB)MapReduce + Skip

Doctrine ODMのMapReduceは、Skipオプションを許可していません。しかし、私は見つけて、のグローバルカウンタとして機能し、if()のチェックで、カウンタがnより小さい場所で効果的にスキップできることを確認して、Scopeに変数を注入して読んだことがあります(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); 
    }"; 

私のPHPバッチループでは$BatchSkipが増えます。

それはトリックです。 リファレンス:MongoDB mapReduceオプション: https://docs.mongodb.com/manual/reference/command/mapReduce/#mapreduce

関連する問題