util.inspect/JSON.stringify 不适用于对象中的数组

util.inspect/JSON.stringify doesn't work on arrays in objects

我正在使用各种命令、find、findones、findoneandupdates 等从 mongodb 检索文档。其中大部分将 return 整个文档保存,这是我想要的。在执行 find 或 findOne 猫鼬时,允许使用 population。我试图传回传递给我的整个对象或查看整个对象,但数组出现错误。我仍然可以手动访问这些值,但我想要整个对象的字符串等效项。我试过 JSON.stringify 和 util.inspect()。可能有人对此有解决方案吗?我见过一些旧的 posts 解决这个问题。如果问题是我如何存储信息,我将 post 我的模型以及有关更改的有用建议将不胜感激。

型号:第一个产品,第二个机器:

var productSchema = new Schema({
    productName: String,
    produtDesc: String,
    author: String,
    lastUpdate: { type: Date, default: Date.now },
    minimum: { type: Schema.Types.ObjectId, ref: 'Machine' },
    recommended: { type: Schema.Types.ObjectId, ref: 'Machine' }
});

var machineSchema = new Schema({
    cpu: {
        speed: String,
        mfg: [String],
        family: [String],
        cores: Number,
        architecture: String
    },  
    memory: {
        total: Number,
        free: Number
    },
    storage: [ {
        drive: String,
        total: Number, 
        free: Number
    } ],
    os: {
        family: String,
        version: String,
        uptime: Number
    },
    screen: {
        height: Number,
        width: Number
    },
    browser: {
        family: String,
        version: String
    },
    network: [ {
        name: String, 
        speed: Number,
        addresses: [ {
            address: String,
            type: String,
            internal: Boolean
        } ]
    } ],
    software: {
        ".net": [String],
        java: [String],
        acrobat: String
    }
}); 

输出代码:

result.populate('recommended')
    .populate('minimum')
    .exec( function(err, done) {
        console.log(util.inspect(done,
            { showHidden: false, depth: 10 }));
        console.log(done.recommended.network[0]);
        reply(util.inspect(done,
            { showHidden: false, depth: null }));
    }); 

示例输出:第一个 util.inspect,第二个 JSON.stringify

// util.inspect
{ _id: 553dc1d60062ee501b88535d,
    recommended:
    { _id: 553dc1d60062ee501b88535b,
     __v: 0,
     software: { acrobat: '9.0', java: [Object], '': [Object] },
      network: [ [Object] ],
      browser: { version: '9', family: 'Internet Explorer' },
      screen: { width: 1920, height: 1080 },
     os: { version: '6.1', family: 'Windows_NT' },
     storage: [],
     memory: { total: 3072 },
     cpu: { cores: 4, speed: '2800', family: [Object], mfg: [Object] } },
     minimum:
     { _id: 553dc1d60062ee501b885359,
     __v: 0,
     software: { acrobat: '9.0', java: [Object], '': [Object] },
     network: [ [Object] ],
     browser: { version: '9', family: 'Internet Explorer' },
     screen: { width: 1024, height: 768 },
     os: { version: '6.0', family: 'Windows_NT' },
     storage: [],
     memory: { total: 2048 },
     cpu: { cores: 2, speed: '2666', family: [], mfg: [Object] } },
     productName: 'Product Name',
     author: 'chris.lohl',
    __v: 0,
     lastUpdate: Fri Apr 17 2015 07:01:37 GMT-0700 (US Mountain Standard Time) 

     }

// JSON.stringify
'{"_id":"553dc1d60062ee501b88535d","recommended":{"_id":"553dc1d60062ee501b88535b","__v":0,"software":{"acrobat":"9.0","java":     ["1.6.0.24"],"":{"net":["2.0","3.5"]}},"network":  [{"name":"ethernet","speed":1000,"_id":"553dc1d60062ee501b88535c","addresses":["[object Object]","[object Object]"]}],"browser": {"version":"9","family":"Internet Explorer"},"screen":  {"width":1920,"height":1080},"os":{"version":"6.1","family":"Windows_NT"},"storage":[],"memory":{"total":3072},"cpu":{"cores":4,"speed":"2800","family":["i3","i5","i7"],"mfg":["intel"]}},"minimum":{"_id":"553dc1d60062ee501b885359","__v":0,"software":{"acrobat":"9.0","java":["1.6.0.2
4"],"":{"net":["2.0","3.5"]}},"network":[{"name":"ethernet","speed":1000,"_id":"
553dc1d60062ee501b88535a","addresses":["[object Object]","[object Object]"]}],"b
rowser":{"version":"9","family":"Internet Explorer"},"screen":{"width":1024,"hei
ght":768},"os":{"version":"6.0","family":"Windows_NT"},"storage":[],"memory":{"t
otal":2048},"cpu":{"cores":2,"speed":"2666","family":[],"mfg":["intel","amd"]}},
"productName":"Product Name","author":"chris.lohl","__v":0,"lastUpdate":"2015-04
-17T14:01:37.000Z"}'

试试这个

JSON.parse(JSON.stringify(地址.[0]));

事实证明,子文档是这个问题的答案。在向数据库插入部分期间,我使用了 JSON 个对象并将它们与我的机器模型的构造函数一起转换。新机器(数据)。直到我在我的模型中为一个网络子文档和一个地址子文档为我的网络地址创建了模式 属性 之后才被转换。

这是更改后的模型:

var addressSchema = new Schema({
    address: String,
    type: String,
    internal: Boolean
}); 
var networkSchema = new Schema({
    name: String, 
    speed: Number,
    addresses: [addressSchema]
}); 
var machineSchema = new Schema({
    cpu: {
        speed: String,
        mfg: [String],
        family: [String],
        cores: Number,
        architecture: String
},  
memory: {
    total: Number,
    free: Number
},
storage: [{
    drive: String,
    total: Number, 
    free: Number
}],
os: {
    family: String,
    version: String,
    uptime: Number
},
screen: {
    height: Number,
    width: Number
},
browser: {
    family: String,
    version: String
},
network: [networkSchema], 
software: {
    ".net": [String],
    java: [String],
    acrobat: String
}
});