如何使用M/d/yyyy格式编写条件的查找查询,并以字符串存储



我的集合中有两个字段,如下

{
    "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'这是返回的true

我不明白为什么会发生这种情况,我不能使用 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"

最新更新