簡體   English   中英

教義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類的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()

然后,我使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM