如何强制mongodb输出严格的JSON?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我想在其他讲JSON的程序中使用某些MongoDB命令的原始输出。当我在蒙戈shell中运行命令,他们代表扩展JSON,在“shell模式”领域,具有特殊的领域,如NumberLongDateTimestamp。我看引用文档中的“严格模式”,但我看不出有什么办法把它的壳,或像运行命令的方式db.serverStatus()在事情输出严格JSON一样mongodump。我如何强制Mongo输出符合标准的JSON?

提问于
用户回答回答于

MongoDB shell会讲Javascript,所以答案很简单:使用JSON.stringify()。如果你的命令是db.serverStatus(),那么你可以简单地做到这一点:

JSON.stringify(db.serverStatus())

这不会为每个字段({ "floatApprox": <number> }而不是{ "$numberLong": "<number>" })输出正确的“严格模式”表示,但如果关心的是获得符合标准的JSON,那么这将会有所斩获。

用户回答回答于

我还没有找到在mongo shell中这样做的方法,但作为一种解决方法,mongoexport可以运行查询,并且其输出使用严格模式,并且可以通过管道传输到其他需要JSON输入的命令(如json_ppor jq)。例如,假设有以下mongo shell命令来运行查询,并且希望使用该数据创建管道:

db.myItemsCollection.find({creationDate: {$gte: ISODate("2016-09-29")}}).pretty()

将这个mongo shell命令转换成这个shell命令,例如为了`json_pp:

mongoexport --jsonArray -d myDbName -c myItemsCollection -q '{"creationDate": {"$gte": {"$date": "2016-09-29T00:00Z"}}}' | json_pp

需要将查询转换为严格模式格式,并将数据库名称和集合名称作为参数传递,以及正确引用shell,如下所示。

扫码关注云+社区