Uni*_*ech 129 mongoose mongodb node.js express odm
是否可以查询特定日期?
我在mongo Cookbook中发现我们可以在一个范围内查询日期范围 ,如下所示:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Run Code Online (Sandbox Code Playgroud)
但具体日期是否可能?这不起作用:
db.posts.find({"created_on": new Date(2012, 7, 14) })
Run Code Online (Sandbox Code Playgroud)
rdr*_*rey 190
如果您在数据库中保存的日期没有时间(仅年,月,日),那应该有效.
可能是您保存的日期new Date()
,其中包括时间组件.要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围.
db.posts.find( //query today up to tonight
{"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})
Run Code Online (Sandbox Code Playgroud)
Pie*_*eau 104
const moment = require('moment')
const today = moment().startOf('day')
MyModel.find({
createdAt: {
$gte: today.toDate(),
$lte: moment(today).endOf('day').toDate()
}
})
Run Code Online (Sandbox Code Playgroud)
重要提示:所有时刻都是可变的!
tomorrow = today.add(1, 'days')
不起作用,因为它也变异today
.调用moment(today)
通过隐式克隆来解决该问题 today
.
是的,Date对象完善了日期和时间,因此将它与日期值进行比较不起作用.
你可以简单地使用$ where运算符用Javascript布尔表达式来表达更复杂的条件:)
db.posts.find({ '$where': 'this.created_on.toJSON().slice(0, 10) == "2012-07-14"' })
Run Code Online (Sandbox Code Playgroud)
created_on
是datetime字段,2012-07-14
是指定的日期.
日期应完全采用YYYY-MM-DD格式.
注意:使用$where
谨慎,它会对性能产生影响.
你有没有尝试过:
db.posts.find({"created_on": {"$gte": new Date(2012, 7, 14), "$lt": new Date(2012, 7, 15)}})
Run Code Online (Sandbox Code Playgroud)
您将遇到的问题是日期存储为Mongo中的时间戳.因此,要匹配您要求它与时间戳匹配的日期.在你的情况下,我认为你试图匹配一天(即在特定日期从00:00到23:59).如果您的日期没有时间存储,那么您应该没问题.否则,如果gte不起作用,请尝试将日期指定为同一天的时间范围(即start = 00:00,end = 23:59).
您可以对API方法使用以下方法来获取特定日期的结果:
# [HTTP GET]
getMeals: (req, res) ->
options = {}
# eg. api/v1/meals?date=Tue+Jan+13+2015+00%3A00%3A00+GMT%2B0100+(CET)
if req.query.date?
date = new Date req.query.date
date.setHours 0, 0, 0, 0
endDate = new Date date
endDate.setHours 23, 59, 59, 59
options.date =
$lt: endDate
$gte: date
Meal.find options, (err, meals) ->
if err or not meals
handleError err, meals, res
else
res.json createJSON meals, null, 'meals'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
154390 次 |
最近记录: |