【问题标题】:MongoDB Dates in Date and String format for the same column同一列的日期和字符串格式的 MongoDB 日期
【发布时间】: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


【解决方案1】:

使用 $expr 和 $toString 解决 这适用于“date_column”的日期和字符串类型

$match: {
    $expr: {
        $gt : [
        { $toString:"$date_column" },
        "2021-04-22"
        ]
    }
}

运营商:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多