簡體   English   中英

Mongo DB - 僅過濾未來日期

[英]Mongo DB - filter only future dates

我正在從 Angular 向 MongoDB 表(通過 RESTHeart 訪問)發出請求,其中每條記錄都包含一個“startDate”字段。 當我獲取一些記錄時,我得到這個日期為 object:

startDate: {$date: 1609718400000}

我只想過濾未來的日期,但是這個過濾器查詢不能按預期工作:

`{ "startDate": { $gt: { $date: ${Date.now()} } } }`

我仍然在過去的日期。 我究竟做錯了什么?

編輯:這是我的 angular function:

getTerms(url: string): Observable<TermDto[]> {
    const params = createParams()
        .append('filter', `{ "startDate": { $gt: { $date: ${Date.now()} } } }`);
    
    return this.client.get<TermDto[]>(url, {params})
}

MongoDb 使用 ISO 格式,嘗試用new Date().toISOString()替換Date.now() )

這應該有效:

{ startDate: { $gt: new Date(Date.now()) } }

RESTHeart 使用 MongoDB 的擴展 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()}}

它以某種方式忽略了“過濾器”參數。 如果有人能夠解釋為什么會發生這種情況,那就太好了。

我最終的聚合解決方案是在前端驗證日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM