本文为阅读 表达式命令官方文档 后做的笔记。
目录:
create_time 是个日期类型,create_time: ISODate(‘2025-09-16T19:51:22.460+00:00’)
db.your_collection.aggregate([
{
$project: {
year: { $year: "$create_time" }, // 2025。年份是 2025
month: { $month: "$create_time" }, // 9。月份是 9
day: { $dayOfMonth: "$create_time" }, // 16。当月的 16 号
hour: { $hour: "$create_time" }, // 19。小时数
minutes: { $minute: "$create_time" }, // 51。分钟数
seconds: { $second: "$create_time" }, // 22。秒数
milliseconds: { $millisecond: "$create_time" }, // 460。毫秒数
dayOfYear: { $dayOfYear: "$create_time" }, // 259。一年中第 259 天
dayOfWeek: { $dayOfWeek: "$create_time" }, // 3。国外周日是第一天,虽然数字是3,其实是周二
week: { $week: "$create_time" }, // 37。位于第 37 周
isoWeek: { $isoWeek: '$create_time' }, // 38。ISO 标准的周数,ISO 标准是周一算第一天,所以是 38
isoDayOfWeek: { $isoDayOfWeek: "$create_time" }, // 2。一周中第 2 天,ISO 标准是周一算第一天,所以是周二
isoWeekYear: { $isoWeekYear: '$create_time' }, // 2025。规则是日期所在周的周四的年份,比如 '2024-12-30'的 isoWeekYear 是 2025,因为 '2024-12-30' 这一天所在周的周四位于 2025 年
}
}
])
将日期类型的字段转为字符串类型的字段。
{
create_date: {
$dateToString: {
date: '$create_time',
format: "%Y-%m-%d",
}
}
}
format: “%Y-%m-%dT%H:%M:%S.%L”
timezone: “Asia/Shanghai”
当字段不存在或者值为 null 时,返回指定的值。
db.inventory.insertMany( [
{ _id: 1, item: "buggy", description: "toy car", quantity: 300 },
{ _id: 2, item: "bicycle", description: null, quantity: 200 },
{ _id: 3, item: "flag" }
] )
查询时使用 $ifNull 设置默认值。
db.inventory.aggregate(
[
{
$project: {
item: 1,
description: { $ifNull: [ "$description", "Unspecified" ] }
}
}
]
)
查询结果:
{ _id: 1, item: "buggy", description: "toy car" }
{ _id: 2, item: "bicycle", description: "Unspecified" }
{ _id: 3, item: "flag", description: "Unspecified" }
将字符串/数值类型的字段转换为日期类型的字段。
create_date: ‘2025-09-16’
{
create_time: {
$toDate: '$create_date'
}
}
先用 $toDate 将字符串转换为日期类型,再用 $isoWeek 获取周数,$isoWeek 的参数只能是日期类型。
db.details.aggregate([
{
$project: {
create_date: 1,
week: {
$isoWeek: {
$toDate: '$create_date'
}
}
}
}
])
↶ 返回首页 ↶