You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:42:37