我想在其他使用JSON的程序中使用一些MongoDB命令的原始输出。当我在mongo shell中运行命令时,它们表示"shell模式“中的Extended JSON字段,以及NumberLong
、Date
和Timestamp
等特殊字段。我在文档中看到对“严格模式”的引用,但我找不到在shell中打开它的方法,也没有办法在输出严格JSON的东西(如mongodump
)中运行像db.serverStatus()
这样的命令。如何强制Mongo输出符合标准的JSON?
发布于 2015-08-19 21:39:42
Javascript外壳使用MongoDB,所以答案很简单:使用JSON.stringify()
。如果您的命令是db.serverStatus()
,那么您可以简单地执行以下操作:
JSON.stringify(db.serverStatus())
这不会输出每个字段的正确的“严格模式”表示({ "floatApprox": <number> }
而不是{ "$numberLong": "<number>" }
),但是如果您关心的是获得符合标准的JSON,那么这样就可以了。
发布于 2016-11-10 07:51:21
我还没有在mongo shell中找到这样做的方法,但是作为一种变通方法,mongoexport
可以运行查询,它的输出使用严格模式,并且可以通过管道传递到其他需要JSON输入的命令中(比如json_pp
或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,如下所示。
发布于 2017-11-18 04:46:34
要构建@jbyler的答案,您可以在获得数据后使用sed剥离numberLongs -如果您使用的是linux。
mongoexport --jsonArray -d dbName -c collection -q '{fieldName: {$regex: ".*turkey.*"}}' | sed -r 's/\{ "[$]numberLong" : "([0-9]+)" }/"\1"/g' | json_pp
https://stackoverflow.com/questions/32097209
复制相似问题