MongoDB升级了他们的命令行接口(以前是 * mongo *,现在是 * mongosh ),以前, mongo * 命令输出是正确的JSON格式,这种格式 * jq * 可以接收。
例如:
{ "abc" : "hello" }
新的 * mongosh * 命令现在输出如下内容:
{ abc: 'hello' }
...无法由 * jq * 解析。
有没有一种方法可以标准化 * mongosh * 以输出标准JSON?
如果没有,是否有任何shell命令可以过滤"不正确但一致"的JSON(来自stdin)并将其规范化为标准格式(到stdout)?
3条答案
按热度按时间smtd7mpg1#
MongoDB的一位员工推荐使用
EJSON.stringify
Package 器,例如:除了
Long(_)
和Date(_)
这样的扩展外,看起来hjson
也可以使用。68bkxrlz2#
原则上可以使用
JSON.stringify()
。但是它有一些限制,请参见以下示例:Date
对象转换为字符串。另一种方法是
EJSON.stringify()
,它可以识别Date
这样的数据类型。文档中也提到了它:EJSON
具有内置格式选项,可以消除对jq.
之类的解析器的需要但是,这些值将打印为
{"$date": "2022-03-26T11:15:53.750Z"}
我的解决方案是定制函数。
tojson
和tojsononeline
在mongosh
中不再存在,所以我创建了自己的:MongoDB中使用了更多的数据类型,但我认为它们几乎没有相关性。否则,请添加更多的
replace()
操作。另一个解决方案是安装“mongosh snippet”,可以使用
snippet install mongocompat
,也可以从https://github.com/mongodb-labs/mongosh-snippets/tree/main/snippets/mongocompat下载脚本并运行最好将这3行放在
.mongoshrc.js
文件中。这3个脚本定义了(几乎?)旧
mongo
shell中的所有功能,这些功能在新mongosh
中尚不可用请注意,当您迁移到新的
mongosh
时,您的应用程序可能会面临更多的差异,例如,请参见mongosh Data Types7gcisfzg3#
您可以从
mongosh
控制台内部将查询 Package 到EJSON.stringify
内部。例如:如果您想运行查询db.books.find({"book-id":"123456789"})
,请执行以下命令。