Jq 无法解析 MongoDB 输出文档

Jq cannot parse MongoDB output document

Jq 是处理 bash 中 JS 文档的好工具。但是由于 Mongodb 添加的功能,我不能用来解析一些 MongoDB 输出文档。 MongoDB Json return 的示例:

{
    "_id" : "example",
    "version" : 23,
    "members" : [
        {
            "_id" : 0,
            "host" : "192.168.0.1:27017",
            "slaveDelay" : NumberLong(0),   <---- Here jq failed to parse this line
            "votes" : 1
        }
]}

jq给出的错误是:

parse error: Invalid numeric literal at line 15, column 32

如有任何帮助,我们将不胜感激。

这是因为mongo在后台使用了BSONsee this

使用带有 json 选项的 mongoexport 将允许生成干净的 json 文件:

 "CreatedDate":{"$date":"2016-08-13T01:01:20.833Z"}

而不是:

 "CreatedDate" : ISODate("2016-08-13T01:01:20.833Z"),

一种可能足以满足某些用途的解决方法是转换 mongo shell 命令的输出。我使用此模式作为解决方法:

mongo --quiet --eval "rs.config()" | sed -e 's/: [a-zA-Z]*(\(.*\))/: ""/' | jq '.'

它删除了“:”之后的所有函数调用,只保留值。

我知道我来晚了一点,但是 Mongo shell 有内置的 JavaScript 支持。所以你可以使用 JSON.stringify.

上面的具体例子,可以用下面的

mongo --quiet --eval "JSON.stringify(rs.config())"