MongoDB $millisecond 运算符介绍

在 MongoDB 中, $millisecond 运算符用于从日期中提取毫秒部分。它可以与聚合管道中的 $project$addFields 阶段一起使用。此运算符只能用于日期类型的字段。

语法

$millisecond 运算符的语法如下:

{ $millisecond: <dateExpression> }

其中,<dateExpression> 表示要提取毫秒部分的日期表达式,可以是以下之一:

  • 一个日期字段的名称,如 $dateField
  • 一个日期值,如 ISODate("2022-03-04T00:00:00.000Z")
  • 一个返回日期值的表达式,如 $toDate

使用场景

$millisecond 运算符常用于需要对日期进行精确计算的场景,例如在日志记录中记录请求响应时间时,可以使用 $millisecond 运算符提取日期的毫秒部分,以便对响应时间进行更细粒度的测量和分析。

示例

假设有一个集合 orders,其中包含多个订单的信息,包括订单号、下单时间等。现在,我们需要使用 $millisecond 运算符提取下单时间的毫秒部分,并将其作为一个新字段添加到每个文档中。

以下是一个使用 $millisecond 运算符的示例:

数据

db.orders.insertMany([
  { orderNo: "001", orderTime: ISODate("2022-03-04T00:01:23.456Z") },
  { orderNo: "002", orderTime: ISODate("2022-03-04T00:02:34.567Z") },
  { orderNo: "003", orderTime: ISODate("2022-03-04T00:03:45.678Z") }
])

聚合操作

db.orders.aggregate([
  {
    $addFields: {
      orderMillisecond: { $millisecond: "$orderTime" }
    }
  }
])

结果

执行以上聚合操作后,将返回以下结果:

{ "_id": ObjectId("..."), "orderNo": "001", "orderTime": ISODate("2022-03-04T00:01:23.456Z"), "orderMillisecond": 456 },
{ "_id": ObjectId("..."), "orderNo": "002", "orderTime": ISODate("2022-03-04T00:02:34.567Z"), "orderMillisecond": 567 },
{ "_id": ObjectId("..."), "orderNo": "003", "orderTime": ISODate("2022-03-04T00:03:45.678Z"), "orderMillisecond": 678 }

结论

$millisecond 运算符可用于从日期中提取毫秒部分,并在聚合管道中使用。它适用于需要对日期进行更细粒度计算的场景。