【发布时间】:2021-05-06 15:27:45
【问题描述】:
我有一个集合,其中同一列具有不同记录的日期和字符串格式日期,具有相同的 ISO 模式,例如 2021-04-22T14:10:48.751779Z。
而且我需要为搜索构建一个统一的查询,使用 =、>、
所以问题是:
- 我能否在搜索之前对现有表数据进行某种转换,例如从日期到字符串,或者如果我有一个字符串值,这种转换不会导致任何异常。 在这种情况下,我将能够通过 $eq、$lt、$gt 和 $regex 查询选项执行搜索。 我不考虑将字符串转换为日期,即使这是可能的,因为我的输入没有“14:10:48.751779Z”这部分日期和查询因为日期不匹配而找不到任何内容。对于这种情况,$regex 似乎是唯一的解决方案。
或者您的任何其他建议都会被考虑。
DB列为String类型时当前查询不满足情况:
{
"aggregate":"collection_name",
"pipeline":[
{
"$match":{
"$and":[
{
"some_column":{
"$eq":"some_value"
}
},
{
"date_column_with_string_or_date_type":{
"$gt":{
"$date":"1980-01-01T00:00:00Z"
}
}
}
]
}
},
{
"$project":{
"_id":1
}
}
]
}
【问题讨论】:
-
请指定您想要的输出模式。
-
@bimjhi 没有这样的模式,我需要检查是否存在指定日期的记录。
-
您是否正在寻找 $toDate 来将字符串转换为日期和搜索? docs.mongodb.com/manual/reference/operator/aggregation/toDate
-
不管字段有不同的数据类型和一个查询过滤器,你只能比较相同类型的数据。这意味着您需要将数据转换为一种类型(仅在查询中的一种类型)并执行匹配。
-
你可以。确保格式类似于“yyyy-mm-dd”(字符串格式需要为年、月、日、小时……)。
标签: mongodb aggregation-framework