首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB/Mongoose在特定日期查询?

MongoDB/Mongoose在特定日期查询?
EN

Stack Overflow用户
提问于 2012-08-16 00:35:49
回答 10查看 236.2K关注 0票数 165

可以查询具体日期吗?

我在mongo Cookbook中发现,我们可以这样做一个range Querying for a Date Range

代码语言:javascript
复制
db.posts.find({"created_on": {"$gte": start, "$lt": end}})

但是有没有可能确定一个具体的日期呢?这不起作用:

代码语言:javascript
复制
db.posts.find({"created_on": new Date(2012, 7, 14) })
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-08-16 00:40:06

如果保存在数据库中的日期没有时间(只有年、月、日),这应该是可行的。

您保存的日期很可能是new Date(),其中包括时间部分。要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围。

代码语言:javascript
复制
db.posts.find({ //query today up to tonight
    created_on: {
        $gte: new Date(2012, 7, 14), 
        $lt: new Date(2012, 7, 15)
    }
})
票数 258
EN

Stack Overflow用户

发布于 2014-12-25 02:40:09

...5+几年后,我强烈建议使用date-fns

代码语言:javascript
复制
import endOfDayfrom 'date-fns/endOfDay'
import startOfDay from 'date-fns/startOfDay'

MyModel.find({
  createdAt: {
    $gte: startOfDay(new Date()),
    $lte: endOfDay(new Date())
  }
})

对于我们这些使用Moment.js的人

代码语言:javascript
复制
const moment = require('moment')

const today = moment().startOf('day')

MyModel.find({
  createdAt: {
    $gte: today.toDate(),
    $lte: moment(today).endOf('day').toDate()
  }
})

重要信息: !

tomorrow = today.add(1, 'days')不起作用,因为它还会改变today。通过隐式克隆today,调用moment(today)解决了这个问题。

票数 162
EN

Stack Overflow用户

发布于 2014-01-04 03:26:09

是的,Date对象完成了date和time,所以只与Date值比较是行不通的。

您可以简单地使用运算符通过Javascript布尔表达式来表达更复杂的条件:)

代码语言:javascript
复制
db.posts.find({ '$where': 'this.created_on.toJSON().slice(0, 10) == "2012-07-14"' })

created_on是日期时间字段,2012-07-14是指定的日期。

日期应完全采用YYYY-MM-DD格式。

注意:谨慎使用$where,这对性能有影响。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11973304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档