javascript - 获取集合和子文档中所有键的名称

标签 javascript mongodb mongodb-query aggregation-framework

我需要从我的集合中获取所有字段名称,包括子文档中的字段。我目前正在运行此命令并仅获取根字段的名称。如何获取所有字段名称?

我的收藏是这样的:

"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/

相关文章:

带有空更新文档的 MongoDB upsert

mongodb - 为什么在什么场景下使用 REST 更好? NoSQL

javascript - 按类型获取 2 个按字母顺序排列的第一个文档

javascript - 从 Javascript 对象中添加和删除特定值

javascript - 类型错误 : Cannot read property 'instanceIdentifier' of undefined (FirebaseStorage)

javascript - 如何使用 JavaScript 中的任意多个文档反序列化转储的 BSON?

没有字段名的mongodb查询结果

node.js - 延迟响应,直到所有查询完成

javascript - 使用 javaScript 创建新的输入字段

用于使用 ASP MVC 2 数据注释验证电子邮件列表的 javascript 正则表达式