我正在完成Meteor-React Todo列表教程https://www.meteor.com/tutorials/react/creating-an-app
根据8.4,我们可以添加一个按钮来隐藏待检查的待办事项。我们通过查询数据库中检查等于true的项目来执行此操作。
if (this.state.hideCompleted) {
// If hide completed is checked, filter tasks
query = {checked: {$ne: true}};
}
如果我只想显示在过去30分钟内创建的todo项目,即todo项目在30分钟后过期,我会将查询设置为什么?
我的猜测是这样的
if (this.state.hideExpired) {
// If hideExpired state true, only display todo items created in the last 30 minutes.
query = {{$ne: (currentTime - createdAt) < 30 minutes}};
}
答案 0 :(得分:0)
非常接近,但您需要使用$lte
或$gte
代替$eq
:
if (this.state.hideExpired) {
var now = new Date();
var thirtyMinutesAgo = new Date() - 30 * 60 * 1000; //
query = { createdAt: { $gte: thirtyMinutesAgo }}
}
请注意,此查询不会被激活。这是因为thirtyMinutesAgo
不是反应变量。如果你希望物品随着年龄的增长而从列表中动态消失,那么你需要让时间本身变得反应。为此我推荐remcoder:chronos包。安装该软件包后,上面的代码将变为:
if (this.state.hideExpired) {
var now = new Date();
var thirtyMinutesAgo = Chronos.currentTime() - 30 * 60 * 1000; //
query = { createdAt: { $gte: thirtyMinutesAgo }}
}
默认情况下, Chronos.currentTime()
会每秒更新一次,而thirtyMinutesAgo
将是一个反应变量。