条件が真ならば、その部分を挿入する動的mongodbクエリを作成したい、そうでなければその部分を挿入しないでください。mongodbクエリで空のphp変数を渡すには
たとえば、時刻が午前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
]
]
]
]);
});
しかし、この例では、クエリにnullを注入し、それが間違っになり、私はエラーをキャッチします:bad query: BadValue: $or/$and/$nor entries need to be full objects
私はまだ$this->N_IN_1_8 = '';
に何の成功を、それを変更していません。
すべて条件が偽の場合、クエリに影響を与えない、中立の変数または条件が必要です。 アイデア?私は事前に構築された配列が条件で使用されていない場合と同様にコードの構造を維持するためにPrefering MongoDBの
おかげで - しかし、私は2番目のオプションで行くとき、私は得る:Aggregate.phpライン93を: $パイプラインはリストではありません(予期しないインデックス: "$ match") –
ありがとうございました! – malarzm