我想选择用户指定日期时间段之间的文档,如:
$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();
我使用laravel框架和jenssegers / laravel-mongodb mongodb驱动程序来运行我的查询,这是我的Raw查询:
$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();
但我的问题是它返回0作为结果;虽然这段时间内有16份文件。
我已经尝试过这种方法来获取它们的数量,但仍然是0结果:
created_at
仅供参考:我已将输入的日期时间转换为ISODate,这是$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")
mongodb字段数据类型是:
"2017-01-07T09:08:59+0000"
我的输入数据类型为:<header>
<h1>Parse Test</h1>
</header>
<br>
<p>Please enter facts:</p>
<input id="inp" type="text">
<br>
<br>
<button type="button" onclick="pass()">Process</button>
<br>
<p id="iop"></p>
<br>
<script>
function pass() {
var lx = document.getElementById("inp").value;
var tx = lx.replace(" ","<br>");
document.getElementById("iop").innerHTML = tx;
}
</script>
有什么建议吗?
答案 0 :(得分:4)
你必须戴上牙套&#34;或者在原始查询中使用updated_at列测试$ to_date,但是在您使用created_at列进行的Eloquent代码中
var curried = _.curry(function)
答案 1 :(得分:4)
我使用Carbon :: createDateFrom方法解决了这个问题,它根据我的输入创建了一个UTC日期时间:
输入:
{
"from_date": "2017-03-10",
"to_date": "2017-04-09"
}
转换输入日期:
$from_date_arr = explode("-",$request->input('from_date'));
$from_date = Carbon::createFromDate($from_date_arr[0],$from_date_arr[1],$from_date_arr[2]);
$to_date_arr = explode("-",$request->input('to_date'));
$to_date = Carbon::createFromDate($to_date_arr[0],$to_date_arr[1],$to_date_arr[2]);
这是我运行的查询有效:
$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)
->where("created_at", "<=",$to_date)
->count();
jessenger驱动程序仍存在一个奇怪的问题,其中whereBetween不起作用,我们应该使用两个where子句来使其工作。
希望解决别人问题。