在MongoDB中将字符串转换为日期的3种方法

发布于

如果你有一个 MongoDB 集合,其中日期存储为字符串,如果需要,你可以将它们转换为 Date BSON 类型。

以下是在MongoDB中将字符串转换为Date的三种方法。

示例数据

本文中的示例在名为 的集合中使用以下文档:dogs

{ “_id” : 1, “name” : “Fetch”, “born” : “2021-01-03T23:30:15.123” }

我们可以看到该字段包含一个日期,但该日期存储为字符串。born

我们可以使用以下聚合管道运算符将该字符串转换为日期。

运营商$dateFromString

聚合管道运算符专门用于将日期转换为字符串。[$dateFromString](https://database.guide/mongodb-datefromstring/ "MongoDB $dateFromString")

它需要一个参数,该参数是要转换为日期的字符串。dateString

下面是将上述集合中的字符串转换为日期的示例:

db.dogs.aggregate([ 
  {
    $project: {
        born: {
          $dateFromString: {
              dateString: '$born'
          }
        }
    }
  } 
])

结果:

{ “_id” : 1, “born” : ISODate(“2021-01-03T23:30:15.123Z”) }

我们可以看到日期现在包装在 ISODate 帮助程序中,这意味着它是一个 Date 对象。

运算符接受一些其他参数,所有这些参数都是可选的。请参阅 MongoDB $dateFromString 了解更多信息和示例。$dateFromString

运营商$toDate

聚合管道运算符将值转换为日期。该值可以是可以转换为日期的任何类型,基本上是数字、字符串和对象 ID。[$toDate](https://database.guide/mongodb-todate/ "MongoDB $toDate")

本文是关于将字符串转换为日期的,因此下面是一个用于执行此操作的示例:$toDate

db.dogs.aggregate([ 
  {
    $project: {
        "born": { 
          $toDate: "$born" 
        }
    }
  } 
])

结果:

{ “_id” : 1, “born” : ISODate(“2021-01-03T23:30:15.123Z”) }

请参阅 Mongo $toDate 了解更多信息和示例。

运营商$convert

该操作员专门设计用于在一种类型和另一种类型之间进行转换。[$convert](https://database.guide/mongodb-convert/ "MongoDB $convert")

该参数指定要转换的字段,参数指定要将其转换为的类型。input``to

例:

db.cats.aggregate(
  [
    {
      $project:
        { 
          result: 
          {
            $convert: { 
              input: "$born", 
              to: "date",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

结果:

{ “_id” : 1, “result” : ISODate(“2021-01-03T23:30:15.123Z”) }

您可能已经注意到,运算符也接受和参数,这使我们能够提供在发生错误或值时使用的消息。这可以防止整个聚合操作停止,并允许在输出文档中显示用户友好的错误消息。$convert``onError``onNull``null

请参阅 MongoDB $convert 了解更多信息和示例。