gpt4 book ai didi

php - 如何在mongodb查询中传递一个空的php变量

转载 作者:IT老高 更新时间:2023-10-28 12:32:03 29 4
gpt4 key购买 nike

我想创建一个动态 mongodb 查询,如果条件为真,则插入聚合的每个部分,否则不注入(inject)该部分。

例如,我想检查时间是否在凌晨 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 注入(inject)到查询中并使其出错,我会捕获错误:bad query: BadValue: $or/$and/$nor entries need to be full objects

我已将其更改为 $this->N_IN_1_8 = ''; 仍然没有成功。

我需要一个中性变量或条件来传递,如果条件为假,则不会影响查询。任何想法?

仅供引用:我正在使用 Laravel 5.3 框架和 jenssegers/laravel-mongodb使用 mongodb 的包

最佳答案

希望代码结构保持原样,即当条件代码中未使用预构建数组时,您可以将 $MidnightCheck 保留为 null 并将带有 array_filter 的数组:

return $collection->aggregate([
[
'$match' => [
'$and' => array_filter([
["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
])
]
// ...

在没有第二个参数的情况下调用 array_filter 将过滤掉数组中的所有错误值,导致不需要的 $MidnightCheck 将消失。

我认为可能更清楚的是预先准备回调中的条件:

$conditions = [
["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"]],
];
if ($MidnighCheck) {
$conditions[] = $MidnightCheck;
}
return $collection->aggregate([
['$match' => [ '$and' => $conditions ],]
])

关于php - 如何在mongodb查询中传递一个空的php变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413907/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com