Mongo DB - 仅过滤未来日期
Mongo DB - filter only future dates
我正在从 Angular 向 MongoDB table(通过 RESTHeart 访问)发出请求,其中每条记录都包含一个“startDate”字段。当我获取一些记录时,我将这个日期作为一个对象:
startDate: {$date: 1609718400000}
我只想过滤未来的日期,但是这个过滤查询没有按预期工作:
`{ "startDate": { $gt: { $date: ${Date.now()} } } }`
我还在获取过去的日期。我做错了什么?
编辑:
这是我的 angular 函数:
getTerms(url: string): Observable<TermDto[]> {
const params = createParams()
.append('filter', `{ "startDate": { $gt: { $date: ${Date.now()} } } }`);
return this.client.get<TermDto[]>(url, {params})
}
MongoDb 使用 ISO 格式,尝试将 Date.now()
替换为 new Date().toISOString()
这应该有效:
{ startDate: { $gt: new Date(Date.now()) } }
RESTHeart 使用 MongoDB 的 Extended JSON 表示。
日期表示为{"$date": {"$numberLong": "<millis>"}}
其中 < millis >
是以毫秒为单位的纪元时间。
所以正确的过滤器是:
?filter={ "startDate": { "$gt": {"$date": {"$numberLong": "1613381427"} } }
对我有用的最简单的方法是:
{ startDate: { $gt: new Date() } }
我的问题源于使用聚合 - 当我传递额外的“avars”查询参数时:
...?avars={'id': "some-id"}&filter={'startDate': {$gt: new Date()}}
它以某种方式忽略了“过滤器”参数。如果有人能够解释为什么会发生,那就太好了。
我最终的聚合解决方案是在前端验证日期。
我正在从 Angular 向 MongoDB table(通过 RESTHeart 访问)发出请求,其中每条记录都包含一个“startDate”字段。当我获取一些记录时,我将这个日期作为一个对象:
startDate: {$date: 1609718400000}
我只想过滤未来的日期,但是这个过滤查询没有按预期工作:
`{ "startDate": { $gt: { $date: ${Date.now()} } } }`
我还在获取过去的日期。我做错了什么?
编辑: 这是我的 angular 函数:
getTerms(url: string): Observable<TermDto[]> {
const params = createParams()
.append('filter', `{ "startDate": { $gt: { $date: ${Date.now()} } } }`);
return this.client.get<TermDto[]>(url, {params})
}
MongoDb 使用 ISO 格式,尝试将 Date.now()
替换为 new Date().toISOString()
这应该有效:
{ startDate: { $gt: new Date(Date.now()) } }
RESTHeart 使用 MongoDB 的 Extended JSON 表示。
日期表示为{"$date": {"$numberLong": "<millis>"}}
其中 < millis >
是以毫秒为单位的纪元时间。
所以正确的过滤器是:
?filter={ "startDate": { "$gt": {"$date": {"$numberLong": "1613381427"} } }
对我有用的最简单的方法是:
{ startDate: { $gt: new Date() } }
我的问题源于使用聚合 - 当我传递额外的“avars”查询参数时:
...?avars={'id': "some-id"}&filter={'startDate': {$gt: new Date()}}
它以某种方式忽略了“过滤器”参数。如果有人能够解释为什么会发生,那就太好了。
我最终的聚合解决方案是在前端验证日期。