本文为阅读 表达式命令官方文档 后做的笔记。
目录:
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 年
}
}
])
拼接字符串。
db.inventory.insertMany( [
{ _id : 1, item : "ABC1", quarter: "13Q1", description : "product 1" },
{ _id : 2, item : "ABC2", quarter: "13Q4", description : "product 2" },
{ _id : 3, item : "XYZ1", quarter: "14Q2", description : null }
] )
使用 $concat 拼接字符串。
db.inventory.aggregate(
[
{ $project: { itemDescription: { $concat: [ "$item", " - ", "$description" ] } } }
]
)
输出:
{ _id : 1, itemDescription : "ABC1 - product 1" }
{ _id : 2, itemDescription : "ABC2 - product 2" }
{ _id : 3, itemDescription : null }
将日期类型的字段转为字符串类型的字段。
{
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'
}
}
}
}
])
↶ 返回首页 ↶