Mongodb 表达式命令笔记📒

2024-10-26 18:13:27

本文为阅读 表达式命令官方文档 后做的笔记。

目录:

日期类型获取年月日时分秒周数值

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 年
        }
    }
])

$dateToString

将日期类型的字段转为字符串类型的字段。

{
    create_date: {
        $dateToString: {
            date: '$create_time',
            format: "%Y-%m-%d",
        }
    }
}

format: “%Y-%m-%dT%H:%M:%S.%L”
timezone: “Asia/Shanghai”

$ifNull

当字段不存在或者值为 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" }

$toDate

将字符串/数值类型的字段转换为日期类型的字段。

create_date: ‘2025-09-16’

{
    create_time: {
        $toDate: '$create_date'
    }
}

案例1:获取字符串类型日期所在周

先用 $toDate 将字符串转换为日期类型,再用 $isoWeek 获取周数,$isoWeek 的参数只能是日期类型。

db.details.aggregate([
    {
        $project: {
            create_date: 1,
            week: {
                $isoWeek: {
                    $toDate: '$create_date'
                }
            }
        }
    }
])

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: