我目前正试图根据两个参数过滤流星集合: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.000Z"
我也尝试过使用:new Date(),但仍然没有发生任何事情:
Meteor.publish('recursos', function() {
let today = new Date();
return Recursos.find({ 'recursos.fechaEnd': { $gt: today }});
});
- 新日期()结果如下: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']
})
});
过滤应该在这里进行吗?
感谢
您的逻辑非常好,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
。