在项目中需要实现这样的功能:按照发布时间的范围筛选查询结果。Date posted(发布时间): Last 24hours(过去24小时), Last 3days(过去三天),Last 7days (过去七天) ,Others (其他时间) ,当用户点击不同的发布时间时,会对查询结果进行筛选并返回符合条件的结果列表。在此记录一下我的做法并整理相关知识点,如果有不正确的地方,欢迎指出。
用户点击相应的筛选条件链接时,将相应的数据存放在URL中。根据我的设计,几个条件分别对应的是“&postDate=1”,“&postDate=3” ,“&postDate=7”,“&postDate=others”。那么用户选择的内容可以根据req.query.postDate得知。如果用户不采用对发布时间的筛选,postDate === undefined, 这时需要展示所有时间的查询结果,并默认按照由新到旧的顺序排序。部分代码如下:
1 | // 按照发布时间筛选 |
根据以上代码,回顾相关知识点:
(一) JavaScript的Date对象
以下内容参考MDN文档
(1)创建与设置日期
日期的创建:
1 | // 没有输入参数,则按照当前的时间创建日期对象 |
日期的设置:
1 | // 设置为指定日期 |
(2)Date对象常用方法
更全面的方法详见上述链接,以下列出几个最常用的:
Getter | |
---|---|
Date.prototype.getDate() | 返回日期对象在月份中的第几天(0-31) |
Date.prototype.getDay() | 返回日期对象在星期中的第几天(0-6) |
Date.prototype.getFullYear() | 返回日期对象的年份 |
Date.prototype.getMonth() | 返回日期对象的月份(0-11) |
Date.prototype.getMinutes() | 返回日期对象的分钟(0-59) |
Date.prototype.getHours() | 返回日期对象的小时(0-23) |
Setter | |
Date.prototype.setDate() | 设置日期对象在月份中的第几天(0-31) |
…… | 与Getter对应 |
(二) MongoDB条件操作符
MongoDB的条件操作符用于比较并从MongoDB集合中获取数据。
(>)大于 | $gt |
---|---|
(<)小于 | $lt |
(>=)大于等于 | $gte |
(<=)小于等于 | $lte |
对于日期而言,比如{$gt: new Date(2019,5,1)}代表大于2019年6月1日的日期(注意月份范围)。{$lte: new Date()}代表今天以及今天之前的日期。
(三)Mongoose的基本查询
Model.find(query, fields, options, callback), 其中fields和options是可选的参数。如果进行排序如options参数参数sort: {date: -1},那就也要填写fields,没有field需填写null。如:Job.find({date: postDate}, null,{sort: {date: -1}})
以下是官方文档的查询示例:
1 | // named john and at least 18 |
Model.findOne() 和Model.find()类似,只不过返回的是单个结果; Model.findById()也返回单个文档,不过它是接收_id作为参数,这个参数可以是字符串,也可以是ObjectId对象,以下是Model.findById()的官网文档示例:
1 | // find adventure by id and execute |