[英]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.