簡體   English   中英

是否可以合並兩個Mongodb查詢?

[英]Is it possible to combine two Mongodb queries?

實際上,我有兩個日期范圍,一個是實際日期范圍,另一個是比較日期范圍。 對於每個日期范圍,我正在執行兩個不同的查詢。

我選擇了聚合方法。 我為每個日期范圍編寫的代碼是..

$resultsetpre = $db_1->command(array(
    'aggregate' => 'ACCOUNT_PERFORMANCE',
    'pipeline'  => array(
        array(
            '$match' => array('Date' => array('$gte'=>$actualstartdate,'$lte'=>$actualenddate))
        ),
        array('$group'  => array(
            '_id'       => "$Id",
            'Clicks'  => array('$sum' => '$Clicks'),
            'Impressions' => array('$sum' => '$Impressions'),
            'Cost' => array('$sum' => '$Cost'),
            'Conversions' => array('$sum' => '$Conversions'),
        ))
    ),
));

我的疑問是我可以寫一個查詢,以便獲取差異列中兩個日期范圍的數據。 由於我的記錄太多,因此需要很長時間。

非常感謝有人幫助我。 提前致謝。

聽起來您想比較兩個不同日期范圍內的點擊次數(或其他總和)。 可以將其視為按天匯總。 您可以將日期轉換為range1,range2或其他值,然后按這些值將其分組,而不是幾天。

這是一個入門示例,比較兩個日期范圍:start1-end1,start2-end2:

project = { "$project" : { 
             "clicks" : 1,
             "range"  : { "$cond" : [ { "$and" : [ 
                                                  { "$gt":["$Date",start1] },
                                                  { "$lt":["$Date",end1] }
                                               ]
                                      },
                                      "range1",
                                      { "$cond" : [ { "$and" : [
                                                          { "$gt":["$Date",start2] },
                                                          { "$lt":["$Date",end2] }
                                                               ]
                                                     },
                                                     "range2",
                                                     null
                                                  ]
                                      }
                                    ]
                        }
             }
};

group = { "$group" : { "_id" : "$range",
                       "clicks" : { "$sum" : "$clicks" }
        }
};

現在,運行db.collection.aggregate( project, group )將為您提供兩個日期范圍中每個日期的點擊總和。 您可以將$match作為刪除{range:null}的中間步驟,以刪除與兩個范圍都不匹配的文檔。

您提到您要在其原始文檔中進行匯總的“ Id”字段,因此您所要做的就是在“ $project步驟中添加“ Id”:1,然后將$group的分組子句更改為如下:

group = { "$group" : { "_id" : {"Id" : "$Id", "range" : "$range"},
                       "clicks" : { "$sum" : "$clicks" }
        }
};

與其按整個集合中的日期范圍進行分組,不如按ID,范圍進行分組,這樣對於每個ID,您將獲得range1的總和和range2的總和。

可能是我缺少了一些東西,但是按以下方式組合它們又是什么問題呢:

'$match' => array(
   'Date' => array('$gte'=>$actualstartdate,'$lte'=>$actualenddate),
    // here is your another query
)

如果我遺漏了要點,請發布您正在執行的兩個查詢。

如果需要合並兩個相同的查詢,可以使用$ or

$match' => array(
   '$or' => array(
      'Date' => array('$gte'=>$actualstartdate1,'$lte'=>$actualenddate1),
      'Date' => array('$gte'=>$actualstartdate2,'$lte'=>$actualenddate2),
   )
)

暫無
暫無

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

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