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

Bash单行MongoDB统计命令添加日期前缀的实现求助

解决方案:给MongoDB统计输出的namespace添加日期前缀

嗨,我来帮你搞定这个问题!你只需要在现有命令里加个日期生成逻辑就行,下面给你两种实用的实现方式,按需选就行:

方法1:在MongoDB脚本内生成日期前缀

这种方法直接在MongoDB的JS脚本里获取当前日期,不用额外依赖Bash命令,适合希望和MongoDB服务器时区保持一致的场景:

mongo --quiet --eval "db.getCollectionNames().forEach(function (n) { 
  var s = db[n].stats(); 
  // 生成YYYY-MM-DD格式的日期前缀,格式可按需调整
  var datePrefix = new Date().toISOString().split('T')[0]; 
  print('namespace=' + datePrefix + '_' + s['ns'] + ',count=' + s['count'] + ',avgObjSize=' + s['avgObjSize'] + ',storageSize=' + s['storageSize']) 
})"

格式调整小技巧:

  • 如果想要带时间的前缀(比如2024-05-20T14:30:00),直接用new Date().toISOString()替换原日期逻辑就行
  • 如果需要本地化日期格式(比如5/20/2024),可以换成new Date().toLocaleDateString()

方法2:在Bash层面生成日期并传入脚本

这种方法由Bash生成日期,适合需要和系统时区对齐,或者要自定义复杂日期格式的场景:

# 先在Bash里生成日期,这里用YYYY-MM-DD格式,可通过date命令参数修改
DATE_PREFIX=$(date +%Y-%m-%d)

# 将日期变量传入MongoDB的eval脚本
mongo --quiet --eval "var datePrefix = '$DATE_PREFIX'; db.getCollectionNames().forEach(function (n) { 
  var s = db[n].stats(); 
  print('namespace=' + datePrefix + '_' + s['ns'] + ',count=' + s['count'] + ',avgObjSize=' + s['avgObjSize'] + ',storageSize=' + s['storageSize']) 
})"

自定义日期格式示例:

比如要生成20240520这种紧凑格式,把date +%Y-%m-%d改成date +%Y%m%d就行,更多格式参数可以通过man date查看系统支持的选项。

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:04:40