arrays - 如何使用 mongo shell 获取 MongoDB 集合中的所有字段名称,包括嵌套字段名称?

标签 arrays mongodb nosql schema

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

我找到了 this useful question/answer能够检索所有字段。答案很有用,但正如那里的评论所述,也可以获取所有嵌套的字段名称吗?仅此问题就需要另一个问题,因此我想知道该怎么做。

我的意思是:

total: 15861
ref_code: "0FMjZj"
settings: Object
    pa_rejected: "1"
    pa_redeem: "1"
    new: "1"

在这个简化的示例中,使用 Mongo CLI 和引用答案中共享的解决方案,我得到:

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

有没有办法同时以某种方式获得 pa_rejectedpa_redeemnew

最佳答案

将 map 函数递归地应用于文档:

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

关于arrays - 如何使用 mongo shell 获取 MongoDB 集合中的所有字段名称,包括嵌套字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63004970/

相关文章:

sql - 分层属性建模

java - 将字符串转换为字符串数组

php - simpleXml 到数组的行为对我来说很奇怪,并且在 9941 项处中断

java - 如何读取我的两个数组?

javascript - ExpressJS - 不会将新用户发布到 MongoDB(500 内部服务器错误)

json - Mongoose 错误: Cast to ObjectID failed for value on reading json for db seed

php - MongoDB (PHP) 中的 $or-Operator

c# - 将类型定义为类型的超集

Node.js JWT,从token获取user_id

database - 数据库水平扩展和垂直扩展的区别