mongodb - 如何从 mongodb 到字符串格式日期之间过滤数据库
问题描述
[
{ "item": "journal", "qty": 25,"date":"1/1/2016", "status": "A" },
{ "item": "notebook", "qty": 50,"date":"10/1/2016", "status": "A" },
{ "item": "paper", "qty": 100,"date":"20/1/2016", "status": "D" },
{ "item": "planner", "qty": 75,"date":"1/2/2016", "status": "D" },
{ "item": "postcard", "qty": 45,"date":"10/2/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"20/5/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"30/7/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"2/3/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/5/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"6/5/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"8/10/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"11/10/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"12/11/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"4/3/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/6/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"6/7/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"7/7/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"17/11/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"19/12/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/1/2019", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"7/1/2019", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"14/3/2019", "status": "A" }
]
以上是我的数据库结构。
db.lichi.find({date: {$gte : '1/1/2016', $lt : '1/1/2019'}})
这是我试图从数据库中获取数据的查询。
在数据库中,我有字符串格式的日期。我正在尝试使用上述方式获取,但没有奏效。
给出了结果
{ "item": "journal", "qty": 25,"date":"1/1/2016", "status": "A" },
{ "item": "notebook", "qty": 50,"date":"10/1/2016", "status": "A" }
只有两个文件。
请看一看。
解决方案
将日期存储为字符串不是最好的主意,因为在这种情况下,您必须比较字符串而不是日期。如果由于某种原因您必须保留date
为字符串,那么您可以在查询中使用$dateFromString将其转换,然后应用您的过滤条件:
db.lichi.aggregate([
{
$addFields: {
date: {
$dateFromString: {
dateString: "$date",
format: "%d/%m/%Y"
}
}
}
},
{
$match: {
date: { $gte: ISODate("2016-01-01T00:00:00Z"), $lt: ISODate("2019-01-01T00:00:00Z") }
}
}
])
推荐阅读
- javascript - Firefox 删除持久性 Cookie
- c - 在位范围内查找第一个设置位的位置
- video - Facebook 开发的可将普通视频比特率整除的时间单位是多少?
- swift - 快速更改应用程序的默认时区
- awk - 按一列合并两个文件 AWK
- css - CSS网格模板区域;有时为空的网格区域 - 令人惊讶的行为
- rust - 使用生命周期参数的约束 impl 中的 Rust 生命周期推断失败,但调整约束可以解决错误
- php - Codeigniter 中的 MySQL 数据库问题
- android - 我试图将我的 Android 应用程序连接到 google firebase,但它显示错误
- android - 在 kotlin 中更改片段获取 IllegalStateException 不能为空