MongoDB聚合运算符:$dateFromString
文章目录
- 语法
- 使用
- 使用例子对规则进行说明
- 格式指示符
- 举例
- 日期转换
- 错误处理onError
- 空值的粗粒 onNull
$dateFromString聚合运算符将日期时间字符串转换为日期对象。
语法
{ $dateFromString: {dateString: <dateStringExpression>,format: <formatStringExpression>,timezone: <tzExpression>,onError: <onErrorExpression>,onNull: <onNullExpression>
} }
参数字段说明:
| 字段 | 必须 | 说明 |
|---|---|---|
dateString | 如果没有用isoWeekYear则必须 | 日历年度,可以是任何能解析为整数的表达式,值域为:1~9999,如果超出范围将报错。从4.4以后最小值为1,再之前的版本最小值是0 |
format | 若year没有用则必须 | ISO的周日期年,可以是任何能解析为整数的表达式,值域为:1~9999,如果超出将报错。从4.4以后最小值为1,再之前的版本最小值是0 |
timezone | 可选 | 执行操作的时区,<timezone>可以是任何能被解析为:Olson时区标识符或UTC偏移量 |
onError | 可选 | 在解析dateString时如果出错,则输出onError表达式的结果,结果值可以是任意类型 |
onNull | 可选 | 如果dateString为null或不存在,则输出onNull表达式的结果,可以是任意类型 |
使用
使用例子对规则进行说明
例1:
{ $dateFromString: {dateString: "2017-02-08T12:10:40.787"
} }
结果:ISODate("2017-02-08T12:10:40.787Z")
例2:
{ $dateFromString: {dateString: "2017-02-08T12:10:40.787",timezone: "America/New_York"
} }
结果:ISODate("2017-02-08T12:10:40.787Z")
例3:
{ $dateFromString: {dateString: "2017-02-08"
} }
结果:ISODate("2017-02-08T00:00:00Z")
例4:
{ $dateFromString: {dateString: "oct 20 2020"
} }
结果:ISODate("2020-10-20T00:00:00.000Z")
例5:
{ $dateFromString: {dateString: "06-15-2018",format: "%m-%d-%Y"
} }
结果:ISODate("2018-06-15T00:00:00Z")
例6:
{ $dateFromString: {dateString: "15-06-2018",format: "%d-%m-%Y"
} }
结果:ISODate("2018-06-15T00:00:00Z")
{ $dateFromString: {dateString: "WED jan 31 12:05:28 +03:30 1996"
} }
结果:ISODate("1996-01-31T08:35:28.000Z")
格式指示符
| 指示符 | 描述 | 可能的值 |
|---|---|---|
| %b | 月份缩写(3个字符) | jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec |
| %B | 完整月份 | january-december |
| %d | 一个月内的第几天(2个数字,0填充) | 01-31 |
| %G | ISO8601格式 年 | 0000-9999 |
| %H | 小时(2个数字,0填充,24小时时钟) | 00-23 |
| %j | 一年内的第几天(3个数字,0填充) | 001-366 |
| %L | 毫秒(3个数字,0填充) | 000=999 |
| %m | 月(2个数字,0填充) | 01-12 |
| %M | 分钟(2个数字,0填充) | 00-59 |
| %S | 秒(2个数字,0填充) | 00-60 |
| %u | ISO8601格式的一周内的第几天 | 1-7 |
| %U | 一年内的第几周(2个数字,0填充) | 00-53 |
| %V | ISO8601格式的一年内的第几周 | 1-53 |
| %w | 一周内的第几天(整数,0-Sunday,6-Saturday) | 0-6 |
| %Y | 年(4个数字,0填充) | 0000-9999 |
| %z | 时区与UTC的偏移量 | +/-[hh][mm] |
| %Z | 从 UTC 开始的分钟偏移量,用数字表示。例如,如果时区偏移(+/-[hhmm])为 +0445,则分钟偏移为+285。 | +/-mmm |
| %% | 百分比字符作为字面值 | % |
举例
日期转换
集合logmessages包含下面的数据:
{ _id: 1, date: "2017-02-08T12:10:40.787", timezone: "America/New_York", message: "Step 1: Started" },
{ _id: 2, date: "2017-02-08", timezone: "-05:00", message: "Step 1: Ended" },
{ _id: 3, message: " Step 1: Ended " },
{ _id: 4, date: "2017-02-09", timezone: "Europe/London", message: "Step 2: Started"},
{ _id: 5, date: "2017-02-09T03:35:02.055", timezone: "+0530", message: "Step 2: In Progress"}
下面的聚合使用$dateFromString将日期值转换为日期对象:
db.logmessages.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: 'America/New_York'}}}
} ] )
上述汇总返回以下文档,并将每个日期字段转换为东部时区:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("2017-02-09T05:00:00Z") }
{ "_id" : 5, "date" : ISODate("2017-02-09T08:35:02.055Z") }
也可以通过文档字段提供时区参数,而不是硬编码参数。例如:
db.logmessages.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: '$timezone'}}}
} ] )
上述汇总返回以下文档,并将每个date字段转换为各自的 UTC 表示形式。
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") }
{ "_id" : 3, "date" : null }
{ "_id" : 4, "date" : ISODate("2017-02-09T00:00:00Z") }
{ "_id" : 5, "date" : ISODate("2017-02-08T22:05:02.055Z") }
错误处理onError
如果文档集中包含不可解析日期字符串的文档,则$dateFromString会出错,除非给参数onError提供一个聚合表达式。
例如,给定一个包含以下文档的日期集合:
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" },
{ "_id" : 2, "date" : "20177-02-09T03:35:02.055", timezone: "America/New_York" }
可以使用onError参数以原始字符串形式返回无效日期:
db.dates.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: '$timezone',onError: '$date'}}}
} ] )
返回的文档如下:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : "20177-02-09T03:35:02.055" }
空值的粗粒 onNull
如果集合文档包含空日期字符串,$dateFromString返回空,除非给onNull指定一个聚合表达式。
例如,集合dates有以下文档:
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" },
{ "_id" : 2, "date" : null, timezone: "America/New_York" }
可以使用onNUll参数让$dateFromString返回代表unix纪元的日期,而不是空值:
db.dates.aggregate( [ {$project: {date: {$dateFromString: {dateString: '$date',timezone: '$timezone',onNull: new Date(0)}}}
} ] )
返回下面的结果:
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") }
{ "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }
相关文章:
MongoDB聚合运算符:$dateFromString
文章目录 语法使用使用例子对规则进行说明格式指示符 举例日期转换错误处理onError空值的粗粒 onNull $dateFromString聚合运算符将日期时间字符串转换为日期对象。 语法 { $dateFromString: {dateString: <dateStringExpression>,format: <formatStringExpression&g…...
Postman(注册,使用,作用)【详解】
目录 一、Postman 1. Postman介绍 2. 安装Postman 3. 注册帐号再使用(可保存测试记录) 4. 创建workspace 5. 测试并保存测试记录 一、Postman postman工具可以发送不同方式的请求,浏览器只能发送get请求(所有用这个工具) 在前后端分离开发模式下,前端技术人员…...
电商数据分析18——电商广告投放的数据分析与优化
目录 写在开头1. 电商广告投放的挑战与机遇1.1 广告投放的主要目标与挑战1.2 广告数据分析的价值 2. 数据分析在广告投放中的应用2.1 目标受众分析与精准定位2.2 广告效果评估与ROI分析2.3 A/B测试与广告内容优化 3. 广告投放优化的实践案例3.1 案例分享:精准定向提…...
Docker下Jenkins打包java项目并部署
docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…...
android 快速实现 recyclerview 的所有item 都执行动画
1.在adapter 里面重写onViewAttachedToWindow 和 onViewDetachedFromWindow 两个方法 package com.example.widget;import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.LinearInterpolator; import android.view.animat…...
Excel转pdf
1、excel-内存值--Workbook 转pdf /** * excel To pdf * * param outPath 输出路径 * param workbook excel-内存值 * throws IOException */ public static void excelToPdf(String outPath,Workbook workbook) throws IOException, DocumentException { Document documentnul…...
QT:用opencv的KNN识别图片中的LED数字(一)
前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设计 2. …...
leetcode72. 编辑距离
leetcode72. 编辑距离 题目 思路 dp[i][j] 代表 word1 到 i 位置转换成 word2 到 j 位置需要最少步数,所以, 当 word1[i] word2[j],dp[i][j] dp[i-1][j-1]; 当 word1[i] ! word2[j],dp[i][j] 1 min(dp[i-1][j-1]…...
R语言的数据类型与数据结构:向量、列表、矩阵、数据框及操作方法
R语言的数据类型与数据结构:向量、列表、矩阵、数据框及操作方法 介绍向量列表矩阵数据框 介绍 R语言拥有丰富的数据类型和数据结构,以满足各类数据处理和分析的需求。本文将分享R语言中的数据类型,包括向量、列表、矩阵、数据框等ÿ…...
第十六章 构建和配置 Nginx 以与 Web 网关配合使用 (Windows) - 将 NSD 与 Nginx 结合使用
文章目录 第十六章 构建和配置 Nginx 以与 Web 网关配合使用 (Windows) - 将 NSD 与 Nginx 结合使用将 NSD 与 Nginx 结合使用CSPNSD_pass hostname:portNum;CSP on; and CSP off;CSPFileTypes filetype1[ filetype2...];CSPNSD_response_headers_maxsize size;CSPNSD_connect_…...
数据中台:数字中国战略关键技术设施
文章目录 每日一句正能量前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿,方法论体系更新与时俱进,紧跟时代热点深入6大行业,提炼实践精华大咖推荐,数字化转型必备案头书购买链接赠书活动 每日一句正能量 人生之…...
mac上更改vscode快捷键
以移动当前行代码为例 mac上的vscode,默认移动当前行代码的快捷键是⌥↑即option↑按键 现在我想改成command↑ 步骤如下 1.打开vscode-code-首选项-键盘快捷键 2.打开快捷键列表 3.输入move line,找到要改动的这个快捷键 当前行-右键-更改键绑定&…...
Day18:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构
目录 小程序获取-各大平台&关键字搜索 小程序体验-凡科建站&模版测试上线 小程序抓包-Proxifier&BurpSuite联动 小程序逆向-解包反编译&动态调试&架构 思维导图 章节知识点 Web:语言/CMS/中间件/数据库/系统/WAF等 系统:操作系…...
真实案例分享:MOS管电源开关电路,遇到上电冲击电流超标
做硬件,堆经验。 分享一个案例:MOS管电源开关电路,遇到上电冲击电流超标,怎么解决的呢? 下面是正文部分。 —— 正文 —— 最近有一颗用了挺久的MOSFET发了停产通知,供应链部门找到我们研发部门,…...
LCR 164. 破解闯关密码
解题思路: 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…...
【鸿蒙 HarmonyOS 4.0】常用组件:List/Grid/Tabs
一、背景 列表页面:List组件和Grid组件; 页签切换:Tabs组件; 二、列表页面 在我们常用的手机应用中,经常会见到一些数据列表,如设置页面、通讯录、商品列表等。下图中两个页面都包含列表,“…...
打造经典游戏:HTML5与CSS3实现俄罗斯方块
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
什么是系统工程(字幕)48
0 00:00:00,760 --> 00:00:03,550 那这里我们要说一下 1 00:00:04,050 --> 00:00:06,163 你看,刚才我们这里 2 00:00:06,163 --> 00:00:06,740 3 00:00:07,440 --> 00:00:13,460 这个我们把它说成,打开这个,关闭这个 4 00:00:…...
Jenkins发送邮件、定时执行、持续部署
集成Allure报告只需要配置构建后操作即可。但如果是web自动化,或是用HTMLTestRunner生成报告,构建后操作要选择Publish HTML reports,而构建中还要添加Execute system Groovy script插件,内容: System.setProperty(&q…...
Mysql的Cardinality值
什么是Cardinality值? Cardinality值是Mysql做索引优化时一个非常关键的值,优化器会根据这个值来判断是否使用这个索引,它表示索引中唯一值的数目估计值,该值应该尽可能接近1,如果非常小,则用户需要考虑是否…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
