为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB /猫鼬在特定日期查询?

/ 猿问

MongoDB /猫鼬在特定日期查询?

凤凰求蛊 2019-12-16 10:26:30

是否可以查询特定日期?


我在mongo Cookbook中发现我们可以针对某个范围进行查询 ,例如:


db.posts.find({"created_on": {"$gte": start, "$lt": end}})

但是可能有特定的日期吗?这不起作用:


db.posts.find({"created_on": new Date(2012, 7, 14) })

MongoDB /猫鼬在特定日期查询?

查看完整描述

4 回答

?
慕斯王

如果您保存在数据库中的日期没有时间(恰好是年,月,日),那应该可行。


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


db.posts.find( //query today up to tonight

  {"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})


查看完整回答
反对 回复 2019-12-16
?
FFIVE

对于使用Moment.js的我们

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。调用moment(today)通过隐式克隆解决了该问题 today。


查看完整回答
反对 回复 2019-12-16
?
慕田峪4524236

是的,Date对象包含日期和时间,因此将其与仅日期值进行比较是行不通的。


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


db.posts.find({ '$where': 'this.created_on.toJSON().slice(0, 10) == "2012-07-14"' })

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


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


注:使用$where谨慎,它会对性能产生影响。


查看完整回答
反对 回复 2019-12-16
?
繁华开满天机

你有没有尝试过:


db.posts.find({"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})

您将要遇到的问题是日期在Mongo中存储为时间戳。因此,要匹配日期,您要求它匹配时间戳。就您的情况而言,我认为您要尝试匹配一天(即特定日期的00:00到23:59)。如果您的日期没有时间存储,那您就可以了。否则,如果gte不起作用,请尝试将您的日期指定为同一天的时间范围(例如,开始= 00:00,结束= 23:59)。


查看完整回答
反对 回复 2019-12-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信