簡體   English   中英

Mongoose 在查找之前應用 getter

[英]Mongoose apply getters before find

我繼承了一個 Mongo 集合,該集合將日期存儲為字符串,例如“2020-11-18”而不是 BSON 日期。 我有一個可以將此字符串轉換為 js 日期的 getter,但我想按日期范圍查詢集合,如下所示:

const Things = mongoose.Model('Thing',
    {
        date: { type: String, get v => new Date(v) }
    }, 
    {
        toJSON: { getters: true },
        toObject: { getters: true },
    }
)

Things.find({ date: { $gt: new Date("2020-11-17"), $lt: new Date("2020-11-19") } })

在執行查找查詢之前,似乎沒有將 getter 應用於文檔。 有沒有辦法做到這一點?

如本文檔所述

干將允許你把它從原始MongoDB的文檔,你看到的價值傳播轉換數據的代表性

因此,您的date將在find()方法執行后立即運行。 否則,在找到日期本身之前,日期的表示將如何改變!

換句話說:

Things.find({ date: { $gt: new Date("2020-11-17"), $lt: new Date("2020-11-19") } })
    // getter will run here
    .then((queryResults) =>{
      
    })

這種格式的日期有一個幸運的特性,即它們的字典排序順序與它們的時間順序相同。

這意味着您可以將它們作為字符串查詢並匹配您期望的文檔。

例如,在一個包含

[
    {"date": "2020-11-16"},
    {"date": "2020-11-17"},
    {"date": "2020-11-18"},
    {"date": "2020-11-19"}
]

查詢

db.Things.find({"date": {$gte: "2020-11-17", $lt: "2020-11-19"}})

正如預期的那樣,返回{"date": "2020-11-17"}{"date": "2020-11-18"}

操場

暫無
暫無

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

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