对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

$dateTrunc(表达式操作符)

$dateTrunc

版本 5.0 中的新增功能。

截断日期。

$dateTrunc 事务语法:

{
$dateTrunc: {
date: <Expression>,
unit: <Expression>,
binSize: <Expression>,
timezone: <tzExpression>,
startOfWeek: <Expression>
}
}
字段
必需/可选
说明

必需

The date to truncate, specified in UTC. The date can be any expression that resolves to a Date, a Timestamp, or an ObjectID.

必需

时间单位,指定为必须解析为以下字符串之一的表达式:

  • year

  • quarter

  • week

  • month

  • day

  • hour

  • minute

  • second

Together, binSize and unit specify the time period used in the $dateTrunc calculation.

Optional

数值时间值,指定为必须解析为非零正数的表达式。默认为 1。

Together, binSize and unit specify the time period used in the $dateTrunc calculation.

Optional

The timezone for the $dateTrunc calculation, specified as an expression that must resolve to a string that contains one of these values:

If no timezone is provided, the $dateTrunc calculation is performed in UTC.

Optional

The start of the week. Used when unit is week. Defaults to Sunday.

startOfWeek is an expression that must resolve to one of these case insensitive strings:

  • monday (或 mon)

  • tuesday (或 tue)

  • wednesday (或 wed)

  • thursday (或 thu)

  • friday (或 fri)

  • saturday (或 sat)

  • sunday (或 sun)

$dateTrunc:

Together, binSize and unit specify the time period used in the $dateTrunc calculation.

例如:

  • If binSize is 1 and unit is hour, the time period is one hour. For the date 2021-03-20T11:30:05Z, $dateTrunc returns 2021-03-20T11:00:00Z.

  • If binSize is 2 and unit is hour, the time period is two hours. For the date 2021-03-20T11:30:05Z, $dateTrunc returns 2021-03-20T10:00:00Z.

$dateTrunc:

  • Divides the time for the $dateTrunc calculation into binSize time periods in the specified time unit.

    The time periods start at a reference date, which is determined by unit. If unit is:

    • A string other than week, $dateTrunc uses a reference date of 2000-01-01T00:00:00.00Z. For example, if binSize is 10 and unit is year, example time periods are:

      • 2000-01-01T00:00:00.00Z

      • 2010-01-01T00:00:00.00Z

      • 2020-01-01T00:00:00.00Z

    • Equal to week, $dateTrunc uses a reference date that is set to the earliest first day of the week that is greater than or equal to 2000-01-01. The first day is set using startOfWeek (the default is Sunday).

  • Returns the lower boundary of the time period that the date is in. The boundary is returned as an ISODate. If the binSize field is 1, $dateTrunc sets the least significant parts (as determined by unit) of the returned ISODate to 0 and keeps the rest of the ISODate the same.

If unit is:

If unit is:

创建cakeSales集合,其中包含加利福尼亚州 ( CA ) 和华盛顿州 ( WA ) 的蛋糕销售情况:

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

以下示例中使用了 cakeSales 集合。

This example uses $dateTrunc in a $project stage to truncate the cake sales orderDate values to two weeks:

db.cakeSales.aggregate( [
{
$project: {
_id: 1,
orderDate: 1,
truncatedOrderDate: {
$dateTrunc: {
date: "$orderDate", unit: "week", binSize: 2,
timezone: "America/Los_Angeles", startOfWeek: "Monday"
}
}
}
}
] )

在示例中:

  • $project 在输出中包含 _id、orderDate 和 truncatedOrderDate 字段。

  • $dateTrunc truncates the orderDate field to a 2 binSize week unit time period in the America/Los_Angeles timezone with startOfWeek set to Monday.

在此示例输出中,截断的 orderDate 显示在 truncatedOrderDate 字段中:

[
{
_id: 0,
orderDate: ISODate("2020-05-18T14:10:30.000Z"),
truncatedOrderDate: ISODate("2020-05-11T07:00:00.000Z")
},
{
_id: 1,
orderDate: ISODate("2021-03-20T11:30:05.000Z"),
truncatedOrderDate: ISODate("2021-03-15T07:00:00.000Z")
},
{
_id: 2,
orderDate: ISODate("2021-01-11T06:31:15.000Z"),
truncatedOrderDate: ISODate("2021-01-04T08:00:00.000Z")
},
{
_id: 3,
orderDate: ISODate("2020-02-08T13:13:23.000Z"),
truncatedOrderDate: ISODate("2020-02-03T08:00:00.000Z")
},
{
_id: 4,
orderDate: ISODate("2019-05-18T16:09:01.000Z"),
truncatedOrderDate: ISODate("2019-05-13T07:00:00.000Z")
},
{
_id: 5,
orderDate: ISODate("2019-01-08T06:12:03.000Z"),
truncatedOrderDate: ISODate("2019-01-07T08:00:00.000Z")
}
]

This example uses $dateTrunc in a $group stage to truncate the cake sales orderDate values to six months and return the sum of the quantity values:

db.cakeSales.aggregate( [
{
$group: {
_id: {
truncatedOrderDate: {
$dateTrunc: {
date: "$orderDate", unit: "month", binSize: 6
}
}
},
sumQuantity: { $sum: "$quantity" }
}
}
] )

在示例中:

在此示例输出中,截断的 orderDate 显示在 truncatedOrderDate 字段中,quantity 的总和显示在 sumQuantity 字段中:

[
{
_id: { truncatedOrderDate: ISODate("2020-01-01T00:00:00.000Z") },
sumQuantity: 224
},
{
_id: { truncatedOrderDate: ISODate("2021-01-01T00:00:00.000Z") },
sumQuantity: 285
},
{
_id: { truncatedOrderDate: ISODate("2019-01-01T00:00:00.000Z") },
sumQuantity: 296
}
]
给本页内容打分

在此页面上