Meteor - 过滤按日期发布的集合项目

时间:2016-05-12 13:12:00

标签: date meteor collections

我目前正在尝试根据以下两个参数过滤流星集合: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 }});
});
  • new Date()结果如下:2016年5月12日星期四09:50:16 GMT-0400(东部夏令时间)

所以看起来这个问题围绕着日期的呈现方式。如何将它们更改为使用相同的日期格式?是通过将它们更改为毫秒?

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

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

过滤是否应该在这里发生?

由于

1 个答案:

答案 0 :(得分: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