0

我正在通过这里找到的 Meteor-React Todo 列表教程https://www.meteor.com/tutorials/react/creating-an-app

根据8.4,我们可以添加一个按钮来隐藏已选中的待办事项。我们通过在数据库中查询检查为真的项目来做到这一点。

if (this.state.hideCompleted) {
        // If hide completed is checked, filter tasks
        query = {checked: {$ne: true}};
    }

如果我只想显示最近 30 分钟内创建的待办事项,即待办事项在 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}};
    }
4

1 回答 1

0

非常接近,但您需要使用$lteor$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将是一个反应变量。

于 2015-10-05T17:16:12.037 回答