Arrays 如何使用MongoShell获取MongoDB集合中的所有字段名,包括嵌套字段名?

Arrays 如何使用MongoShell获取MongoDB集合中的所有字段名,包括嵌套字段名?,arrays,mongodb,nosql,schema,Arrays,Mongodb,Nosql,Schema,我正在寻找一种方法来检索MongoDB集合中所有可能的字段,因为在所有文档中,并不是每个文档都有相同的字段,以便为我手头的任务中所有可能的情况做好准备 我发现可以检索所有字段。答案很有用,但正如在那里的注释中所述,是否也可以获得所有嵌套字段名?这个问题本身就需要另一个问题,因此,我想知道怎么做 我的意思是: total: 15861 ref_code: "0FMjZj" settings: Object pa_rejected: "1" p

我正在寻找一种方法来检索MongoDB集合中所有可能的字段,因为在所有文档中,并不是每个文档都有相同的字段,以便为我手头的任务中所有可能的情况做好准备

我发现可以检索所有字段。答案很有用,但正如在那里的注释中所述,是否也可以获得所有嵌套字段名?这个问题本身就需要另一个问题,因此,我想知道怎么做

我的意思是:

total: 15861
ref_code: "0FMjZj"
settings: Object
    pa_rejected: "1"
    pa_redeem: "1"
    new: "1"
在这个简化的示例中,使用Mongo CLI并在引用的答案中共享解决方案,我得到:

[
   "total",
   "ref_code",
   "settings"
]

是否有办法以某种方式使
pa_被拒绝
pa_赎回
新建

将映射函数递归应用于文档:

db['foo'].deleteMany({})
db['foo'].insert({a:{foo:{bar:{zoom:42}}},b:'c',d:'e',x:[]})

mr = db.runCommand({
  "mapreduce" : "foo",
  "map" : function() {
    var f = function() {
      for (var key in this) {
        if (this.hasOwnProperty(key)) {
          emit(key, null)
          if (typeof this[key] == 'object') {
            f.call(this[key])
          }
        }
      }
    }
    f.call(this);
  },
  "reduce" : function(key, stuff) { return null; },
  "out": "myCollectionName" + "_keys"
})


print(db[mr.result].distinct("_id"))

你能在这里解释一下你的代码吗?能够更好地理解它。再次感谢!我真正的问题是对这些概念的误解(MapReduce、map、reduce、out…)当然我需要广泛阅读文档,除此之外,我没有弄清楚
foo
(示例集合?)和
myCollectionName
in-out…之间的区别,我在Mongo Shell中遇到以下错误:
E QUERY[js]未捕获异常:语法错误:意外标记:关键字'if':@(Shell):1:204添加
emit(key,null)
之后,我得到了以下信息:
“errmsg”:“InternalError:递归太多:\nf@:4:13\nf@:7:13(…)
仍然不清楚,抱歉。请提供更多建议。感谢您按照我在mongo shell中发布的方式键入它。下面是一篇文章,其中包含一些使用其他工具的答案,但不是
mongo
shell: