Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何编写带条件的查找查询,查询日期为M/D/yyy格式,并存储为字符串_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 如何编写带条件的查找查询,查询日期为M/D/yyy格式,并存储为字符串

Javascript 如何编写带条件的查找查询,查询日期为M/D/yyy格式,并存储为字符串,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我的集合中有两个字段,如下所示 { "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'这是返回真值 我不

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

{
    "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'这是返回真值

我不明白为什么会发生这种情况我不能使用MM/DD/YY格式我必须坚持M/D/YYYY格式


请提前向我提供更好的解决方案,谢谢

如评论中所述,两个日期都是简单的字符串。为了对其使用逻辑运算符,必须首先使用以下管道将其转换为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”:“2019年1月3日”
变成了
“StartDateISO”:“2019-01-03 00:00:00.000Z”

如评论中所述,两个日期都是简单的字符串。为了对其使用逻辑运算符,必须首先使用以下管道将其转换为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”:“2019年1月3日”
变成了
“StartDateISO”:“2019-01-03 00:00:00.000Z”
“StartDate”

的可能副本是作为对象还是作为简单字符串存储的?在第一种情况下,这个问题确实是重复的。两者都是字符串可靠比较字符串格式日期的唯一方法是,如果它们的格式为
YYYY/MM/DD
,则其他任何内容都不一致。在比较之前,您可能必须首先解析日期。可能的重复项是作为对象或简单字符串存储的
“StartDate”
“EndDate”
?在第一种情况下,这个问题确实是重复的。两者都是字符串可靠比较字符串格式日期的唯一方法是,如果它们的格式为
YYYY/MM/DD
,则其他任何内容都不一致。在比较之前,您可能必须首先解析日期。数据库中的字符串日期被正确解析,因为我指定了它们的格式。新日期(“2019年10月5日”)仍然存在问题——并不总是一致的。您是否还需要在搜索查询中使用m/d/Y格式?如果是这样的话,我将尝试提出一个解析这些日期的解决方案。我更新了代码-现在解析了所有日期(在查询和数据库中)。我的mongo版本服务器低于4.0数据库中的字符串日期解析正确,因为我指定了它们的格式。新日期(“2019年10月5日”)仍然存在问题——并不总是一致的。您是否还需要在搜索查询中使用m/d/Y格式?如果是这样的话,我将尝试提出一个解析这些日期的解决方案。我更新了代码-现在所有日期都被解析了(在查询和数据库中)。我的mongo版本服务器低于4.0