我的集合中有两个字段,如下
{
"StartDate" : "1/2/2019",
"EndDate" : "5/14/2019"
}
我想编写一个查询查询以获取当前日期的文档示例db.collection.find({StartDate:{$lte: '5/9/2019'},EndDate:{$gte:'5/10/2019'}})
我不明白为什么会发生这种情况,我不能使用 mm/dd/yy 格式,我必须坚持 m/d/d/yyyy 格式
请为我提供更好的解决方案,谢谢
在评论中阐明,两个日期都是简单的字符串。为了使用逻辑运算符,您必须首先使用类似的聚合管道将它们转换为同义对象:
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"