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

如何在Shell脚本中提取MongoDB文档中的Id字段值

规范提取MongoDB导出结果中的Id数字值

方法一:使用jq(推荐,JSON专用解析工具)

jq是专为JSON数据设计的命令行处理工具,相比grep/sed能更可靠地解析结构化数据,不会因JSON格式的细微变化(如空格、字段顺序)出错。

安装jq

根据你的系统选择安装命令:

# Debian/Ubuntu 系列
sudo apt install jq

# RHEL/CentOS 系列
sudo yum install jq

# macOS(需先安装Homebrew)
brew install jq

结合mongoexport提取Id

将mongoexport的输出通过管道传给jq,精准提取Id字段的数值:

# 若mongoexport默认输出每行一个JSON对象
mongoexport --db db --collection collection --fields Id | jq -r '.Id'

# 若指定输出为JSON数组(--jsonArray参数)
mongoexport --db db --collection collection --fields Id --jsonArray | jq -r '.[].Id'
  • -r参数:让jq输出原始的数值/字符串,不带JSON格式的引号
  • --fields Id:限制mongoexport只返回Id字段(减少输出数据量)

方法二:直接用mongosh查询输出(跳过mongoexport)

如果不需要导出完整JSON文件,直接通过mongosh执行脚本查询并输出Id,效率更高:

mongosh --quiet db --eval "db.collection.find({}, {Id: 1, _id: 0}).forEach(doc => print(doc.Id))"
  • --quiet:关闭mongosh的启动提示等冗余输出
  • find({}, {Id:1, _id:0}):查询时只返回Id字段,排除默认的_id字段
  • forEach遍历结果集,每行打印Id的纯数字值

为什么不推荐grep/sed?

正则表达式处理JSON属于“hack式”方法,存在诸多隐患:

  • JSON的格式允许字段间有任意空格、换行,正则规则容易失效
  • 若Id字段是字符串类型(如"Id": "12345"),正则可能误匹配其他数字内容
  • 无法适配嵌套的JSON结构,扩展性极差

内容的提问来源于stack exchange,提问作者Mévatlavé Kraspek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:25