Bash - 将MONGODB BSON转换为JSON

10

我有一个调用MongoDB命令并生成BSON输出的shell命令。然后我想使用jq解析该输出,因此我需要使用jq的tojson将BSON转换为JSON。

echo "db._adminCommand({replSetGetStatus : 1})" | /path/to/mongo

我该如何实现tojson,是不是只需要像这样简单地做:

echo "db._adminCommand({replSetGetStatus : 1})" | /path/to/mongo | jq '[.[]|tojson]'

我还没有在我的服务器上安装jq,因为我必须先证明它的有效性,然后才能发布。

当我在在线演示中尝试使用 .[]|tojson 时,它无法工作,但我不确定这是否是演示的限制?

编辑

所以我设法在运行mongodb的测试服务器上安装了"jq"并尝试了这个:

echo "db._adminCommand({replSetGetStatus : 1})" | /path/to/mongo | ./jq '.members[] | {Server: .name, State: .stateStr}'

我收到的错误信息是这样的:

parse error: Invalid numeric literal at line 1, column 8

看起来"jq"无法解析replSetGetStatus的数据。

同时,当我坐在这里苦思冥想、等待变更管理死亡小队出现时,如果有人有一些想法,将不胜感激。


我看到一些名为b2json的程序,可以将BSON转换为JSON。 - John Zwinck
谢谢John,我真的想使用"jq",因为我更有机会通过变更管理并将其放到服务器上。此外,它具有许多有用的功能。 - SnazzyBootMan
哦,我明白了。那么,你应该在测试机器或桌面上的虚拟机上安装“jq”(什么?变更管理不喜欢虚拟机?!)。你必须有一些开发/测试环境,这样才不会受到太多限制。如果没有,那就是时候找新工作了! - John Zwinck
那就是新工作啦;-) 我需要一台运行Mongodb的测试机器,而构建虚拟机需要时间。 - SnazzyBootMan
在亚马逊上启动一个虚拟机,然后... 这只需要最多5分钟。 - Matt
谢谢@Matt,非常有帮助,请查看编辑。 - SnazzyBootMan
2个回答

18
你可以使用随 MongoDB 一起提供的 bsondump 实用程序:
bsondump yourfile.bson | head

2
将BSON转换为JSON:bsondump collection.bson --outFile=collection.json - Yozef
如果BSON包含多个文档,会怎么样? - undefined

3

将您的MongoDb数据库导出到文件夹:

mongodump --host localhost --port 27017 --db mongo_db_name

将创建一个包含文件集合的文件夹。请使用以下代码创建bash脚本:
#!/bin/bash
declare -a array00
array00=( $(ls -d $PWD/*.bson) )
for file in "${array00[@]}"; 
do 
bsondump $file --outFile=$file.json
done

将此文件保存为名为run.sh的文件,放在存放*.bson文件的文件夹中。 标记文件可执行。 运行文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接