我想从日期大于给定日期的数据中获取记录。但是我在将日期与mongodb
iso datetime进行比较时遇到了问题。
目前我正在以Y-m-d格式获取日期,我希望在mongodb
格式的查询和日期中进行比较,格式为2015-10-08T08:01:46.000Z
。
答案 0 :(得分:6)
Laravel的Eloquent支持Carbon / DateTime对象而不是MongoDate对象,当保存到数据库时,这些对象将在内部转换为MongoDate对象。您可以在您的查询中使用名为 Carbon 的laravel中的此日期处理包。
例如,如果您要查询来自用户数据的记录,其中mongodb日期时间字段created_at
大于给定日期(例如今天的记录),请使用Carbon {{3 属性:
$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();
另一种方法是使用 startOfDay()
,它允许您使用Carbon / DateTime对象而不是MongoDate对象。示例受到 Eloquent :
<?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();
答案 1 :(得分:0)
比较日期的最简单方法是使用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数据库。