在Shell中将MongoDB文档转换为扩展JSON

3
我是一个可以将MongoDB文档转换为扩展JSON的Shell工具。
如果原始的JSON文件看起来像这样:
{
    "_id" : ObjectId("5a8c60b8c83eaf000fb39547"),
    "name" : "myName",
    "created" : ISODate("2018-02-20T17:54:00.091Z"),
    "components" : [
        ...

结果会像这样:
{
    "$oid" : "5a8c60b8c83eaf000fb39547",
    "name" : "myName",
    "created" : { "$date" : "2018-02-20T17:54:00.091Z"},
    "components" : [
        ...

如果这已经是一个“冷”JSON文件而不是来自数据库,你不能轻易地做到这一点。没有工具会知道你的 "created" : ISODate("2018-02-20T17:54:00.091Z") 应该是 "created" : { "$date" : "2018-02-20T17:54:00.091Z"}。最好的方法是在从数据库运行并写入文件时进行操作,因为那里有各种JSON函数/选项。 - Akrion
MongoDB扩展JSON格式的标准命令行工具是mongoexport,它是MongoDB服务器安装包中包含的工具之一。还有一个伴侣工具mongoimport,用于将扩展JSON导入到MongoDB中。如果这些工具不适合您的需求,您可以详细说明您想要实现什么。 - Stennie
1个回答

1
MongoDB shell使用JavaScript语言,所以答案很简单:使用JSON.stringify()。如果你的命令是db.serverStatus(),那么你可以直接这样做:
JSON.stringify(db.serverStatus())

这样做无法输出每个字段的正确的“严格模式”表示,而是使用({ "floatApprox": <number> }而不是{ "$numberLong": "<number>" })。但如果您关心的是获取符合标准的JSON格式,这个方法可以解决问题。

我应该在一个JSON文件中指定输入,而不是直接从数据库获取。 - Paul
const EJSON = require('mongodb-extjson'); const text = '{ "int32": { "$numberInt": "10" } }';// 输出 { int32: { [String: '10'] _bsontype: 'Int32', value: '10' } } console.log(EJSON.parse(text, { relaxed: false }));// 输出 { int32: 10 } console.log(EJSON.parse(text));
https://github.com/mongodb-js/mongodb-extjson
- Harsh Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接