【发布时间】:2020-10-28 11:34:02
【问题描述】:
我有一个日期存储为字符串 YYYY-mm-DD_HH:MM:SS.UUUZ 的集合,例如 2020-10-20_12:15:22.123+0100
我的目标是查询将这些字符串视为日期的字符串。
我在做什么: 我正在展开多个文档上的一些标题数据:
{
"$unwind": {
"path": "$events",
"preserveNullAndEmptyArrays": true
}
}
还有
{
"$unwind": {
"path": "$events.hi2",
"preserveNullAndEmptyArrays": true
}
}
我正在添加一个用解析为日期的字符串创建的新字段
{
"$addFields": {
"events.hi2.ConnectTimets": {
"$dateFromString": {
"dateString": "$events.hi2.ConnectTime",
"format": "%Y-%m-%d_%H:%M:%S.%L%Z"
}
}
}}
然后在$match 阶段,我尝试过滤所有日期早于 2020 年 6 月 1 日的记录:
{
"$match":{
"events.hi2.ConnectTimets": {
"$gt": {"$dateFromString": {
"dateString": "2020-06-01",
"format": "%Y-%m-%d"
}
}
}
}
}
我的结果是Fetched 0 record(s) in 0ms
即使数据库中存在(至少一个文档)且日期与过滤器匹配:
{
"_id" : ObjectId("5f438dfbf1feb13c4352e9f4"),
"timestamp" : NumberLong(1598262779045),
"attribute1" : [
"common"
],
"events" : [
{
"eventType" : "ty1",
"timestamp" : NumberLong(1598262779018),
"docId" : NumberLong(282578800148736),
"hi2" : {
"Priority" : 3,
"ClientId" : "client1",
"ConnectTime" : "2020-08-24_09:52:58.993+0000",
"Direction" : 1
}
},
{
"eventType" : "ty2",
"timestamp" : NumberLong(1598262781071),
"docId" : NumberLong(282578800148736),
"hi2" : {
"ref" : "bbbb"
}
}
]
}
当我想到类似的东西时
{
"_id" : ObjectId("5f438dfbf1feb13c4352e9f4"),
"timestamp" : NumberLong(1598262779045),
"attribute1" : [
"common"
],
"events" : [
{
"eventType" : "ty1",
"timestamp" : NumberLong(1598262779018),
"docId" : NumberLong(282578800148736),
"hi2" : {
"Priority" : 3,
"ClientId" : "client1",
"ConnectTime" : "2020-08-24_09:52:58.993+0000",
"Direction" : 1
}
}
}
注意_:添加字段是可以的,因为如果我在没有匹配阶段的情况下触发它,则会输出一个字符串解析为日期的字段
【问题讨论】: