【问题标题】:Using Wildcard with ISODate MongoDB在 ISODate MongoDB 中使用通配符
【发布时间】:2021-11-18 03:35:42
【问题描述】:

我正在尝试查找日期在小时分钟和秒部分中包含 00:00:00 的所有记录,以查找在我们的订阅服务中出错的文档。试图使用它,但它出错了。

db.CustomerSubscriptions.find({"UpcomingOrders.NextOrderDate": ISODate("/.*00:00:00.*/")})

【问题讨论】:

    标签: json mongodb


    【解决方案1】:

    您可以使用$dateToParts

    db.CustomerSubscriptions.aggregate([
      { 
        $set: { 
          dateParts: {$dateToParts: {date: "$UpcomingOrders.NextOrderDate", timezone: ... } }
        } 
      },
      {$match: {"dateParts.hour": 0, "dateParts.minute": 0, "dateParts.second": 0} }
    ])
    

    【讨论】:

      【解决方案2】:

      您只能在字符串上应用正则表达式,因此您可以使用聚合并找到匹配的记录。请参考这里:https://mongoplayground.net/p/4o2h98R5jve

      示例代码:

          db.collection.aggregate([
        {
          "$addFields": {
            "dateStrMatched": {
              $regexMatch: {
                input: {
                  "$dateToString": {
                    "date": "$date"
                  }
                },
                regex: "00:00:00."
              }
            }
          }
        },
        {
          "$match": {
            dateStrMatched: true
          }
        }
      ])
      

      流水线阶段: 添加字段:将日期转换为字符串并匹配正则表达式并将布尔标志存储为日期匹配与否 match:只过滤匹配的日期

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多