[英]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.