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