我的集合中有两个字段,如下所示
{
"StartDate" : "1/2/2019",
"EndDate" : "5/14/2019"
}
我想编写一个查找查询来获取当前日期的文档
示例 db.collection.find({StartDate:{$lte: '5/9/2019'},EndDate:{$gte:'5/10/2019'}})
但是这里'5/14/2019' >= '5/9/2019'这个条件返回 false '5/14/2019' >= '5/9/2019' 返回 true
我不明白为什么会发生这种情况,我无法使用 MM/DD/YY 格式,我必须坚持使用 M/D/YYYY 格式
请为我提供更好的解决方案,提前致谢
最佳答案
正如评论中所澄清的,两个日期都是简单的字符串。为了对它们使用逻辑运算符,您必须首先使用 aggregation 将它们转换为 ISODate 对象。像这样的管道:
db.collection.aggregate([{
"$addFields": {
"StartDateISO": {
"$dateFromString": {
"dateString": "$StartDate",
"format": "%m/%d/%Y"
},
},
"EndDateISO": {
"$dateFromString": {
"dateString": "$EndDate",
"format": "%m/%d/%Y"
}
},
"queryStartDateISO": {
"$dateFromString": {
"dateString": "5/9/2019",
"format": "%m/%d/%Y"
}
},
"queryEndDateISO": {
"$dateFromString": {
"dateString": "5/10/2019",
"format": "%m/%d/%Y"
}
},
}
}, {
"$match": {
"$expr": {
"$and": [
{"$lte": ["$StartDateISO", "$queryStartDateISO"]},
{"$gte": ["$EndDateISO", "$queryEndDateISO"]}
]
}
}
}])
它将在 MongoDB 4.0 及更高版本中工作。在我的测试中正确解析了日期:
"StartDate": "1/3/2019"
变为 "StartDateISO": "2019-01-03 00:00:00.000Z"
关于javascript - 如何编写带有 M/D/YYYY 格式日期条件并存储为字符串的查找查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56058728/