如何将Linux日期转换为MongoDB时间戳并用于mongodump查询
将Linux日期转换为MongoDB兼容的时间戳格式用于mongodump查询
1. 修正昨日日期的获取命令
你原来的YESTERDAY赋值写法有误,Linux的date命令不支持直接通过减法计算日期,正确方式是用-d参数指定相对时间:
# 获取当前日期时间(可选,不需要可省略) TODAY=$(date '+%Y-%m-%d %H:%M:%S') # 获取昨日同一时间的日期时间 YESTERDAY=$(date -d "1 day ago" '+%Y-%m-%d %H:%M:%S')
2. 直接生成MongoDB所需的时间戳格式
MongoDB的$date要求ISO 8601 UTC格式(如2023-04-09T16:27:54.282Z),我们可以让date命令直接输出该格式,无需额外转换:
# 生成昨日同一时间的MongoDB兼容时间戳(毫秒固定为000,可按需调整) MONGO_YESTERDAY=$(date -d "1 day ago" '+%Y-%m-%dT%H:%M:%S.000Z')
格式参数说明:
%Y-%m-%d:年-月-日T:日期与时间的固定分隔符(MongoDB要求)%H:%M:%S:时:分:秒.000Z:毫秒部分(设为000即可满足多数场景)+ UTC时区标识
3. 整合到mongodump命令中
将生成的时间戳变量代入mongodump的--query参数,注意shell变量的引用和引号转义:
# 定义MongoDB时间戳变量 MONGO_YESTERDAY=$(date -d "1 day ago" '+%Y-%m-%dT%H:%M:%S.000Z') # 执行mongodump命令 mongodump --host "dba_rs/mongoexample.net:27018" \ -u root -p **** \ --authenticationDatabase admin \ -d local -c oplog.rs \ --query="{\"wall\":{\"\$gte\":{\"\$date\":\"${MONGO_YESTERDAY}\"} }}" \ --out /mongologs
注:用双引号包裹整个--query内容,同时对JSON里的双引号和$符号转义,确保shell能正确解析变量并传递给MongoDB。
完整脚本示例
如果需要一键执行,可将步骤整合为脚本:
#!/bin/bash # 生成MongoDB兼容的昨日时间戳 MONGO_YESTERDAY=$(date -d "1 day ago" '+%Y-%m-%dT%H:%M:%S.000Z') # 执行mongodump mongodump --host "dba_rs/mongoexample.net:27018" \ -u root -p "你的密码" \ --authenticationDatabase admin \ -d local -c oplog.rs \ --query="{\"wall\":{\"\$gte\":{\"\$date\":\"${MONGO_YESTERDAY}\"} }}" \ --out /mongologs
内容的提问来源于stack exchange,提问作者Rehan Khatib
相关产品推荐
相关产品推荐

