【问题标题】:Jenssegers MongoDB "like query" returning blank array on ISODateJenssegers MongoDB“like query”在 ISODate 上返回空白数组
【发布时间】:2015-04-04 20:52:32
【问题描述】:

我有以下查询,但它返回一个空数组(我知道这个查询应该返回一条记录)

$created_at = date("Y-m");

$content = ContentModel::where('userId', $id->_id)
->where('created_at', 'like', "%{$created_at}%")
->orderBy('fav', 'DESC')
->get();

如果我删除 ->where('created_at', 'like', "%{$created_at}%"),它会返回一切正常,但我想要今年和月份的内容,但是当我输入时查询不起作用。

数据库中的日期是ISODate格式 "created_at" : ISODate("2015-02-03T16:29:26.965Z")

我猜是因为 ISODate 格式。如何获得我需要的结果?

谢谢

【问题讨论】:

  • 我检查了上次运行的查询:{"query":"content.find({"userId":"545b08c10f6e807b0a8b4567","created_at":{"rege‌​x":"^2015-02$","flags":"i"}}, [])","bindings":[],"time":0.04} 这似乎正确,但没有返回任何内容
  • 有人吗?请帮助我仍然无法弄清楚

标签: php mongodb laravel-4 jenssegers-mongodb


【解决方案1】:

改用此代码:

$created_at = new DateTime(date('F jS Y h:i:s A', strtotime('first day of ' . date('F Y'))));

$content = ContentModel::where('userId', $id->_id)
            ->where('created_at', '>', $created_at)
            ->orderBy('fav', 'DESC')
            ->get();

在此代码中,$created_at 变量表示当前月份的 1 号。

【讨论】:

  • 这确实有效,我得到了我需要的结果,但你能解释为什么like query 不工作吗?将其标记为答案
  • 因为created_at 字段以 ISODate 格式存储日期,它不是一个普通的字符串。这样我们就不能在这里使用like查询了。
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 2012-10-22
  • 1970-01-01
  • 2013-04-14
  • 2018-08-27
  • 2019-04-15
  • 2017-09-12
相关资源
最近更新 更多