我想創建一個動態的MongoDB查詢其插入它的每一部分的聚集,如果條件爲真,否則不注射的那部分。如何傳遞一個空的PHP變量MongoDB中查詢
比如我要檢查,如果時間是凌晨1點至早上8點。如果是,則定義的數組到MongoDB的查詢其他人處理,沒有在傳遞。
if ($this->Not_in_1_8 == true) {
$this->N_IN_1_8 = array('dont_show_between_1_n_8' => array('$ne' => true));
}else {
$this->N_IN_1_8 = null;
}
$MidnightCheck = $this->N_IN_1_8;
$this->campaign = Bcamp::raw(function ($collection) use ($seat_category_list, $banner_size, $seat_filter_list, $gold_network, $MidnightCheck) {
return $collection->aggregate([
[
'$match' => [
'$and' => [
["targets.cats" => [
'$in' => $seat_category_list
]
],
['banners.' . $banner_size => [
'$exists' => true
]
],
['href' => [
'$nin' => $seat_filter_list
]
],
['targets.gold_network' => [
'$eq' => $gold_network
]
],
['status' => [
'$ne' => "Low_Budget"
]
],
['daily_budget_status' => [
'$ne' => "Low_Budget"
]
],
$MidnightCheck
]
]
],
[
'$project' => [
'ab' => [
'$cmp' => [
'$budget', '$click_cost'
]
]
]
],
[
'$match' => [
'ab' => [
'$lt' => 1
]
]
]
]);
});
但在這個例子中它會注入到空查詢,使得它錯了,我趕上錯誤:bad query: BadValue: $or/$and/$nor entries need to be full objects
我已經改成了$this->N_IN_1_8 = '';
仍然沒有成功。
我需要一箇中立的變量或條件,其中通過如果要是假的條件不會對查詢的影響。 任何想法?
FYI:我使用Laravel 5.3 jenssegers/laravel-mongodb的 包框架與mongodb的工作
感謝您的教育答案 - 但是當我第二個選項去我得到:Aggregate.php線93 : $管道是不是列表(意外指數:「$匹配」) –
謝謝你這樣做! – malarzm