如何在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
相关产品推荐
相关产品推荐

