首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制mongodb输出严格的JSON

强制mongodb输出严格的JSON
EN

Stack Overflow用户
提问于 2015-08-19 21:39:42
回答 4查看 17.8K关注 0票数 43

我想在其他使用JSON的程序中使用一些MongoDB命令的原始输出。当我在mongo shell中运行命令时,它们表示"shell模式“中的Extended JSON字段,以及NumberLongDateTimestamp等特殊字段。我在文档中看到对“严格模式”的引用,但我找不到在shell中打开它的方法,也没有办法在输出严格JSON的东西(如mongodump )中运行像db.serverStatus()这样的命令。如何强制Mongo输出符合标准的JSON?

有关于这个话题的several other questions,但我觉得他们的答案都不是特别令人满意。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-19 21:39:42

Javascript外壳使用MongoDB,所以答案很简单:使用JSON.stringify()。如果您的命令是db.serverStatus(),那么您可以简单地执行以下操作:

代码语言:javascript
复制
JSON.stringify(db.serverStatus())

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

票数 42
EN

Stack Overflow用户

发布于 2016-11-10 07:51:21

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

代码语言:javascript
复制
db.myItemsCollection.find({creationDate: {$gte: ISODate("2016-09-29")}}).pretty()

将mongo shell命令转换为以下shell命令,出于示例目的,通过管道连接到`json_pp:

代码语言:javascript
复制
mongoexport --jsonArray -d myDbName -c myItemsCollection -q '{"creationDate": {"$gte": {"$date": "2016-09-29T00:00Z"}}}' | json_pp

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

票数 7
EN

Stack Overflow用户

发布于 2017-11-18 04:46:34

要构建@jbyler的答案,您可以在获得数据后使用sed剥离numberLongs -如果您使用的是linux。

代码语言:javascript
复制
mongoexport --jsonArray -d dbName -c collection -q '{fieldName: {$regex: ".*turkey.*"}}' | sed -r 's/\{ "[$]numberLong" : "([0-9]+)" }/"\1"/g' | json_pp
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32097209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档