gpt4 book ai didi

MongoDB 原始查询以选择给定日期时间段内的文档

转载 作者:可可西里 更新时间:2023-11-01 09:09:17 25 4
gpt4 key购买 nike

我想选择用户给定日期时间段内的文档,例如:

$from_date : "2017-01-07 09:08:59" To `$to_date : "2017-08-09 09:08:59"` 

我正在使用 laravel 框架和 jenssegers/laravel-mongodb mongodb 驱动程序来运行我的查询,这是我的原始查询:

 $normal_banners = BannerView::raw(function ($collection) use ($id, $from_date, $to_date) {
$conditions = [
["camp_id" => ['$eq' => $id]],
['$or' => [
['seat_target_status' => ['$eq' => true]],
['seat_target_status' => ['$eq' => false]]
]],
['camp_target_status' => ['$eq' => false]],
];

if ($from_date) {
$conditions[] = ['created_at' => ['$gte' => $from_date]];
}

return $collection->aggregate([
['$match' => ['$and' => $conditions]],
]);
})->count();

但我的问题是它返回 0 作为结果;而这段时间有16个文件。

我试过这种方法来计算它们的数量,但结果仍然为 0 :

   $normal_banners = BannerView::Where('camp_id', $id)
->where(function ($query) {$query->where('seat_target_status', true)->orWhere('seat_target_status', false);
})
->where('camp_target_status', false)
->where("created_at", ">=", $from_date)
->count();

仅供引用:我已将输入的日期时间转换为 ISODate,这是 created_at 字段的 mongodb 数据类型。

$Fromdatetime = $request->input('from_date');
$from_date = new DateTime($Fromdatetime);
$from_date = $from_date->format(DateTime::ISO8601);

mongodb 字段数据类型是:

 "updated_at": ISODate("2017-04-10T09:35:58.641Z"),
"created_at": ISODate("2017-04-10T09:35:58.641Z")

我的输入数据类型是:"2017-01-07T09:08:59+0000"

有什么建议吗?

最佳答案

您必须“放入大括号”或 Where 函数,并且在您的原始查询中,您正在使用 updated_at 列测试 $to_date,但在 Eloquent 代码中,您正在使用 created_at 列进行测试

$targeted_banners = BannerView::Where('camp_id', $id)
->where(function($query){$query->where('seat_target_status', true)->orWhere('seat_target_status', false);})
->where('camp_target_status', false)
->where("created_at", ">=" $from_date)
->where("updated_at", "<=", $to_date)
->count();

关于MongoDB 原始查询以选择给定日期时间段内的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360416/

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