如何不手动指定字段名,从MongoDB返回的JSON对象中提取全部字段值
实现方案
你不需要手动指定字段名,直接使用JavaScript原生的对象处理方法就可以提取所有字段值,另外现有代码里cursor.next()返回的本身就是标准JS对象,不需要额外做JSON序列化再反序列化的冗余操作。
完整修改后的代码
async function fetchDatafromDB (client, IDs) { let mapData = new Map(); for (let i = 0; i < IDs.length; i++) { console.log('当前处理的ID为:' + IDs[i]); const cursor = client.db('snapp_transactions').collection('price_check_validation').find({ Scenario: { $in: [IDs[i]] } }); while (await cursor.hasNext()) { let ts = Date.now(); // 直接获取查询返回的对象,无需序列化反序列化 const doc = await cursor.next(); console.log('查询到的完整文档:', doc); // 方案1:直接获取所有字段值组成的数组 const allValues = Object.values(doc); console.log('所有字段值:', allValues); // 方案2:遍历所有键值对,可做逐个处理 Object.entries(doc).forEach(([fieldName, fieldValue]) => { console.log(`字段名:${fieldName},字段值:${fieldValue}`); // 可按需将值存入之前定义的mapData mapData.set(fieldName, fieldValue); }); // 原有取指定字段的逻辑可保留,不受影响 console.log(doc['Execution Environment']); } } // 可按需返回处理完成的数据集 return mapData; }
核心方法说明
Object.values(对象):直接返回对象所有可枚举属性的值组成的数组,顺序和for...in循环遍历的顺序一致,无需知道任何字段名就能拿到全部值Object.entries(对象):返回由[键名, 键值]子数组组成的数组,适合需要同时处理字段名和字段值的场景Object.keys(对象):返回所有字段名组成的数组,也可以遍历这个数组再逐个从对象中取值
内容的提问来源于stack exchange,提问作者johan jk
相关产品推荐
相关产品推荐

