我需要从我的集合中获取所有字段名称,包括子文档中的字段。我目前正在运行此命令并仅获取根字段的名称。如何获取所有字段名称?
我的收藏是这样的:
"UserId" : 11111,
"Personal" : {
"Email" : "email@gmail.com",
"FirstName" : "Name",
"LastName" : "Last"
},
"Car" : {
"CarType" : "NULL"
}
这是命令
var mr = db.runCommand({
"mapreduce" : "myCollection",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) { return null; },
"out": "myCollection" + "_keys"
})
db[mr.result].distinct("_id")
我想要这个结果:
UserId、Personal.Email、Personal.FirstName、Personal.LastName、Car.CarType
最佳答案
在纯 Javascript 中,您可以通过查看对象、它们的键和嵌套对象来采用迭代和递归的方法。
function getKeys(object) {
if (!object || typeof object !== 'object') {
return [];
}
if (Array.isArray(object)) {
return object.reduce((r, o) => [...r, ...getKeys(o)], []);
}
return Object.keys(object).reduce((r, k) => [...r, k, ...getKeys(object[k])], []);
}
var object = { UserId: 11111, Personal: { Email: "email@gmail.com", FirstName: "Name", LastName: "Last" }, Car: { CarType: "NULL" }, array: [{ foo: '', bar: '' }, { foo: '', bar: '' }] };
console.log(getKeys(object));
关于javascript - 获取集合和子文档中所有键的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652283/