【问题标题】:Meteor - Filter collection items published by datesMeteor - 过滤按日期发布的收藏项目
【发布时间】:2016-05-12 23:26:30
【问题描述】:

我目前正在尝试根据两个参数过滤流星集合:currentDate 和来自集合 dateEventEnds。

这是我当前的发布代码:

Meteor.publish('recursos', function() {
  let today = Date.now();
  return Recursos.find({ 'recursos.fechaEnd': { $gt: today }});
});

实际上什么也没做。我认为这是由于:

  • Date.now() 以毫秒为单位生成日期。例如:1463058648464
  • 虽然 recursos.fechaEnd 的存储方式如下:“2016-04-30T00:00:00.000Z”

也尝试过使用:new Date(),但仍然没有任何反应:

Meteor.publish('recursos', function() {
  let today = new Date();
  return Recursos.find({ 'recursos.fechaEnd': { $gt: today }});
});
  • 新的 Date() 结果如下:Thu May 12 2016 09:50:16 GMT-0400 (Eastern Daylight Time)

所以看起来问题围绕着日期的呈现方式。我怎样才能将它们更改为都使用相同的日期格式?是通过将它们更改为毫秒吗?

我需要进行过滤的模板同时包含集合和 EasySearchIndex,如下所示:

RecursosIndex = new EasySearch.Index({
    collection: Recursos,
    fields: ['clase', 'direccion.city'],
    engine: new EasySearch.MongoDB({
      sort: () => ['fechaStart']
    })
});

过滤应该在这里进行吗?

谢谢

【问题讨论】:

  • 只是猜测:let today = new Date(); ?
  • 也试过了,使用 Date.now() 来生成当前日期。
  • @Julien 看起来问题与日期值的存储/表示方式有关
  • new Date() 也产生当前日期,并且日期比较应该与 Date 对象一起使用。另外,另一件事,您正在寻找具有未来日期(比现在晚)的对象,这是您想要的吗?
  • @julien 我正在使用 EasySearch,并注意到模板同时订阅了集合和 collectionIndex。我已修改我的问题以包含 EasySearch 索引。也许这里需要做hte过滤器?

标签: date meteor collections


【解决方案1】:

您的逻辑非常好,Mongo 非常有能力按日期字段进行搜索和排序。问题是您在 Mongo 中的日期存储为字符串而不是实际日期。如果您查看一个对象,您应该会看到如下字段:

真实的约会:

"createdAt" : ISODate("2015-09-18T05:42:50.105Z")

一个字符串:

"createdAt" : "2015-09-18T05:42:50.105Z"

要将现有数据集从字符串升级到日期,请运行以下命令:

Recursos.find().forEach(function(r){
  Recursos.update(r._id,{$set: { 'recursos.fechaEnd': new Date(r.fechaEnd) }});
});

当然你可以一次转换多个日期,我怀疑你的对象也有一个fechaStart

【讨论】:

  • 感谢您的帮助。看起来我正在查看 MeteorToys 上的信息,但 Robomongo 确实正确显示了它。真正的问题在于模板链接到 EasySearch 并需要那里的过滤器......
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2021-11-05
相关资源
最近更新 更多