我有这样的数据:如何查询ISO日期为今天的对象?
[
...
{
date: {
startDate: '2017-04-21T00:00:00.000Z',
endDate: '2017-04-21T00:00:00.000Z',
startTime: '12:00',
endTime: '21:00'
}
},
{
date: {
startDate: '2017-04-21T00:00:00.000Z',
endDate: '2017-04-21T00:00:00.000Z',
startTime: '09:00',
endTime: '23:00'
}
}
...
]
这是我到目前为止有:
export const OngoingEventsQuery: any = {
type: 'event',
body: {
from: 0,
size: 2,
query: {
range: {
'date.startDate': {
gt: new Date().getDate() - 1
},
'date.endDate': {
lt: new Date().getDate() + 1
}
}
}
}
};
现在我需要做的,是要匹配符合今天的日期的对象,以及考虑到startTime
和endDate
。所以如果今天的日期是april 21 2017
,时间是15:00
,上述两个对象都应该匹配。
尝试没有开始和结束时间匹配,这个查询给了我数据库中的每一个可能的对象,这是错误的。
我想我必须给出yesterday
和tomorrow
之间的日期,以获得today
,通过使用getDate()
加上一个或一个。但这显然是错误的。
我该怎么做?
编辑:奇怪的是,如果我从查询中删除from
和size
我得到0的结果..
除非您无法控制进入ES的数据,否则我建议在索引时移动所有这些逻辑,并确保您在那里为正确的日期编制索引(包括小时/分钟)。 –
@AndreiStefan我不能这样做,不幸的是,数据必须像这样存储和索引像这样:/ – Chrillewoodz
没有人阻止你创建另一个字段(除了存在的字段),你有全时间戳用于这种范围匹配。我想说的是,解决这种类型的映射可能会影响你的查询性能。 –