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