我想从数据中获取日期大于给定日期的记录。但是我在比较日期与mongodb
iso datetime时遇到了问题。
目前我得到的日期在Y-m-d格式,我想在查询和日期在mongodb
是在2015-10-08T08:01:46.000Z
格式比较。
Laravel的Eloquent支持Carbon/DateTime对象而不是MongoDate对象,后者在保存到数据库时将在内部转换为MongoDate对象。您可以使用laravel中的日期处理包Carbon来处理您的查询。
例如,如果你想从用户数据中查询mongodb datetime字段created_at
大于给定日期的记录,例如今天的记录,使用Carbon的 startOfDay()
属性:
$dt = Carbon::now()->startOfDay();
$users = User::where('created_at', '>', $dt)->get();
同样,要执行数据范围查询,即查询特定月份之间的记录,例如2015年10月,使用 whereBetween
方法:
$users = User::whereBetween(
'created_at', array(
Carbon::createFromDate(2015, 10, 1),
Carbon::createFromDate(2015, 10, 31)
)
)->get();
另一种方法是使用Eloquent,它允许您使用Carbon/DateTime对象而不是MongoDate对象。灵感来自文档的例子:
<?php
use Jenssegers'Mongodb'Model as Eloquent;
class User extends Eloquent {
use SoftDeletingTrait;
/**
* Collection for Model
*
* @var String
*/
protected $collection = "users";
/**
* Connection for model
*
* @var type
*/
protected $connection = 'mongodb';
protected $dates = array('created_at');
}
允许您执行如下查询:
$users = User::where('created_at', '>', new DateTime('-1 day'))->get();
或者本机使用MongoDate对象,您可以尝试
$start = new MongoDate(strtotime("2015-10-01 00:00:00"));
$stop = new MongoDate(strtotime("2015-10-31 00:00:00"));
$users = DB::collection('users')->whereBetween('created_at', array($start, $stop))->get();
比较日期最简单的方法是使用Carbon。
例如,如果你想从Y-m-d得到
你可以这样写:
$dt = Carbon::createFromDate(2017,11,7);
式中2017 =年,11 =月,7 =日。根据您需要的日期更换。
如果你想获取当前时间之前的数据,你可以使用
$dt = Carbon::now()
如果你想从当前月的第一天开始获取数据,你只需要这样做:
$dt = Carbon::now()->startOfMonth();
下面是我在代码中使用的一个示例:
$device_data = DB::connection('mongodb')
->table('MyRecipe')
->where('data_date', '>', $dt)
->select('*')
->get();
我使用https://github.com/jenssegers/laravel-mongodb访问我的Mongo数据库