【问题标题】:How to compare date with mongodb iso date in laravel mongodb eloquent query?如何在laravel mongodb eloquent查询中将日期与mongodb iso日期进行比较?
【发布时间】:2017-11-07 16:28:36
【问题描述】:

我想从日期大于给定日期的数据中获取记录。但我在将日期与mongodb iso 日期时间进行比较时遇到问题。

目前我正在获取 Y-m-d 格式的日期,我想在查询中比较它,mongodb 中的日期是2015-10-08T08:01:46.000Z 格式。

【问题讨论】:

  • 您必须使用您的日期 new Date('Y-m-d') 创建新日期,然后查询它
  • @Suresh-ISM 你能详细说明一下吗?
  • var date1 = new Date("Y-m-d"); test.find({ created: { $gt: new Date(date) } }) 或 test.find({ created: { $gt: new Date("Y-m-d") } })

标签: php mongodb laravel-5


【解决方案1】:

Laravel 的 Eloquent 支持 Carbon/DateTime 对象而不是 MongoDate 对象,这些对象在保存到数据库时会在内部转换为 MongoDate 对象。您可以在 laravel 中使用名为 Carbon 的日期处理包来处理您的查询。

例如,如果您想从用户数据中查询记录,其中 mongodb 日期时间字段 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 对象。受 docs 启发的示例:

<?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();

【讨论】:

  • 感谢@chridam 我能够通过使用 MongoDate 对象来完成它。
  • 为什么找不到 mongodate
  • @Tuhin 使用新的 \MongoDB\BSON\UTCDateTime(milisecond)
【解决方案2】:

比较日期的最简单方法是使用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 数据库。

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多